JUCE Accessibility Preview Branch

This is all great stuff - thanks for the detailed reports. We’ll be going through all of these over the next few weeks so please keep posting any issues you find.

All my widgets have tooltips, is there a way to make this available in voiceover ?

1 Like

Regarding customizability of the AccessibilityHandlers, if I want a custom handler for my components (for example let’s say I want to display the component tooltip in the AccessibilityHandler::getHelp() method, or maybe I want to return something different than getButtonText in ButtonAccessibilityHandler::getTitle()), I have to subclass all the components that I want to have this customized handler.

I think quite often we will want to have an easier way to change the default AccessibilityHandler so that we do not have to subclass all Component classes. For example the LookAndFeel class could be used to return a default accessibility handler for the various juce widgets. So the implementation in juce::Button would be:

virtual std::unique_ptr Button::createAccessibilityHandler() {
return LookAndFeel::createButtonAccessibilityHandler();

The same could be applied for FocusTraverser classes, delegating (by default) their creation to LookAndFeel would simplify the replacement of juce-provided FocusTraverser with a custom one.

first off, this is awesome and i’m glad to see it.

when this is finally added to ios, will the accessibility features enable ui testing from xcode? right now trying to record interactions fails because none of the juce ui elements are recognized by xcode, but i’m wondering if identifying widgets to screen reader software is essentially solving this problem too?

1 Like

Yes on iOS this will enable Xcode UI testing as it exposes all of the accessible JUCE UI elements to the OS which were previously just drawn inside the window.


that’s great, thanks for the update!

On Windows, popup menus have the same issue I saw with tooltips, where the narrator focus gets stuck on a window that no longer exists.

Any thoughts on a custom component that just displays a value that periodically updates? Like a CPU or voice count meter. The AccessibilityValueInterface seems to only be for numbers. How can I let the screen reader know that value has changed?

Will there be some updates to the accessibility branch soon?

Thanks, I’m looking into the Narrator focus issues at the moment. We’ll be updating the branch in the next few days with lots of fixes/improvements and this fix should be a part of that.

Have you tried posting an AccessibilityEvent::valueChanged event using the notifyAccessibilityEvent() method of the handler which is updating?

1 Like