The main change in wx accessibility is this:
7dab555f71 (diff-04f5191d86f95b1c4d5d9c979da65878)
However wxWindowAccessible has not been updated to take into account of that change. In particular wxWindowAccessible::GetParent() was always wrong, but it was consistent with the rest of the framework. Now it's wrong and inconsistent. This function should return an object with role window, and which has the same name.
The fix is to introduce class WindowAccessible, which is effectively our own version of wxWindowAccessible. This class does not override GetParent(), and so just relies on a standard accessible object to to the right thing in wxIAccessible::get_accParent() (which is does). This class also allows us to have our own version of GetName(), which allows us to set the accessibility names of buttons.
These changes will break the accessibility of Audacity if it is built with wxWidgets 3.0.X. If this is a problem, then there could be some #if stuff in WindowAccessible.h to turn the WindowAccessible class into one which simply inherits from wxWindowAccessible, and doesn't override anything.
... Such are not for display to the user. They are appended to menu item
names to identify accelerators, and wxWidgets transforms them appropriately
for the operating system.
Defaulted move constructors and assignments introduced at 080dd34 are not
essential but might give a bit more efficiency in std::vector on non-Windows.
Previous compilation fix was incorrect! Excpliticly defined move assignments
should not have had no-effect bodies!
We now don't sort the list until a view is selected. Also we create it with nodes open, rather than creating with nodes closed and then separately opening them. Instead of 3 sorts at initialisation only one happens now. AX info is only updated after a sort, so this may be 3x faster for screen reader users too.
The slow opening was caused by sorting lists of commands. The comparison function was slow because it created new strings, entailing malloc/free and used translation in the function. Comparison function was being called about 4,000 times.
... for functions in final classes.
override is like const -- it's not necessary, but it helps the compiler to
catch mistakes.
There may be some overriding functions not explicitly declared virtual and I did
not identify such cases, in which I might also add override.
... Should have no effect on generated code, except perhaps some slight faster
virtual function calls. Mostly useful as documentation of design intent.
Tried to mark every one of our classes that inherits from another, or is a
base for others, or has abstract virtual functions, and a few others besides.
Saves view type
Defaults to fully expanded upon entry
Live search...may need to adjust the timer
Uses black on white for the icon (should? fix assertion on Linux hopefully)
(will do more a bit later)