This probably isn't a priority for Kirix and I recognise it's a relatively boring thing to have to worry about, but I would like to push for some progress on this; wxWidgets should be encouraging development of accessible apps. I would be happy to contribute some or all of a bounty, and perhaps others would like to join in with either coding or funding.
What should we be adding to wxAUI to make it keyboard-friendly? Here are some thoughts:
- When you click on a tab in a wxAuiNotebook, it should get the focus (marked by a dotted rectangle), and left and right arrow keys should navigate through the tabs. Tab should go to the first control in the page (presumably).
- There should be a key combination for showing the Window list in a wxAuiNotebook, or at least a programmatic way of showing it so the application can supply an accelerator.
- There should be a way of cycling through panes. A pane can be shown as active using wxAUI_MGR_ALLOW_ACTIVE_PANE, which is a good start, since then some key combination could be assigned to going to the next available pane. Or maybe there should be a pane menu mirroring the wxAuiNotebook window menu. I don't know if tab should be used for cycling through panes - perhaps some other key combination. The ability to cycle through panes programmatic would at least allow the application to decide how the keyboard should be used to do this.
- There should be a way of docking/undocking panes via the keyboard. This could be supplied by the application, of course, but it would be nice to have support built-in.
- Maybe there could a context menu in each toolbar with a list of commands. However, navigating between toolbars would be tricky unless a toolbar could be marked as 'active': perhaps the gripper could change colour.
- There are other functions that might be harder to support via the keyboard, such as moving tabs between notebooks and resizing panes, but if the API is there to support these things (for example unsplitting a notebook, which currently can't be done programmatically in wxAUI) then the app can do the rest.
Although not wxAUI-specific, another idea is to have a pane or dialog that shows the app's window structure in a tree, so the user can quickly call up this window, navigate through the tree via the keyboard, and then press return to go to the desired pane. wxAUI could present the app with functions for adding a wxAuiManager's panes and tabs to this navigator dialog. Windows that are not currently visible can also be present in the navigator, e.g. a command to invoke the Preferences dialog. (In fact the whole dynamic application and document structure could be reflected in the navigator, but this is getting off-topic.)
It would be helpful to find examples of how pane navigation is done in other apps, but I haven't found anything yet - Visual C++ 2005 doesn't appear to allow keyboard navigation of its tabs, let alone the panes.
Any thoughts very welcome. Pity we don't have another GSoC coming up soon...
Thanks,
Julian