Browse Source

Accessibility: Prefer toggle action to press action for checkable items

v6.1.6
reuk 3 years ago
parent
commit
12b7a8f9d1
No known key found for this signature in database GPG Key ID: 9ADCD339CFC98A11
7 changed files with 17 additions and 7 deletions
  1. +1
    -0
      examples/GUI/AccessibilityDemo.h
  2. +4
    -2
      modules/juce_gui_basics/native/accessibility/juce_android_Accessibility.cpp
  3. +1
    -1
      modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm
  4. +2
    -1
      modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm
  5. +4
    -0
      modules/juce_gui_basics/native/accessibility/juce_mac_AccessibilitySharedCode.mm
  6. +3
    -2
      modules/juce_gui_basics/native/accessibility/juce_win32_AccessibilityElement.cpp
  7. +2
    -1
      modules/juce_gui_basics/native/accessibility/juce_win32_UIAToggleProvider.h

+ 1
- 0
examples/GUI/AccessibilityDemo.h View File

@@ -418,6 +418,7 @@ constexpr NameAndRole accessibilityRoles[]
{ "Ignored", AccessibilityRole::ignored },
{ "Unspecified", AccessibilityRole::unspecified },
{ "Button", AccessibilityRole::button },
{ "Toggle", AccessibilityRole::toggleButton },
{ "ComboBox", AccessibilityRole::comboBox },
{ "Slider", AccessibilityRole::slider },
{ "Static Text", AccessibilityRole::staticText },


+ 4
- 2
modules/juce_gui_basics/native/accessibility/juce_android_Accessibility.cpp View File

@@ -354,7 +354,8 @@ public:
isSelected ? ACTION_CLEAR_SELECTION : ACTION_SELECT);
}
if (accessibilityHandler.getActions().contains (AccessibilityActionType::press))
if ((accessibilityHandler.getCurrentState().isCheckable() && accessibilityHandler.getActions().contains (AccessibilityActionType::toggle))
|| accessibilityHandler.getActions().contains (AccessibilityActionType::press))
{
env->CallVoidMethod (info,
AndroidAccessibilityNodeInfo.setClickable,
@@ -480,7 +481,8 @@ public:
case ACTION_CLICK:
{
if (accessibilityHandler.getActions().invoke (AccessibilityActionType::press))
if ((accessibilityHandler.getCurrentState().isCheckable() && accessibilityHandler.getActions().invoke (AccessibilityActionType::toggle))
|| accessibilityHandler.getActions().invoke (AccessibilityActionType::press))
{
sendAccessibilityEventImpl (accessibilityHandler, TYPE_VIEW_CLICKED, 0);
return true;


+ 1
- 1
modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm View File

@@ -403,7 +403,7 @@ private:
// which element it thinks has focus and forward the event on to that element if it differs
id focusedElement = UIAccessibilityFocusedElement (UIAccessibilityNotificationVoiceOverIdentifier);
if (! [(id) handler->getNativeImplementation() isEqual: focusedElement])
if (focusedElement != nullptr && ! [(id) handler->getNativeImplementation() isEqual: focusedElement])
return [focusedElement accessibilityActivate];
if (handler->hasFocus (false))


+ 2
- 1
modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm View File

@@ -797,7 +797,8 @@ private:
continue;
if (selector == @selector (accessibilityPerformPress))
return handler->getActions().contains (AccessibilityActionType::press);
return (handler->getCurrentState().isCheckable() && handler->getActions().contains (AccessibilityActionType::toggle))
|| handler->getActions().contains (AccessibilityActionType::press);
if (selector == @selector (accessibilityPerformShowMenu))
return handler->getActions().contains (AccessibilityActionType::showMenu);


+ 4
- 0
modules/juce_gui_basics/native/accessibility/juce_mac_AccessibilitySharedCode.mm View File

@@ -126,6 +126,10 @@ protected:
static BOOL accessibilityPerformPress (id self, SEL)
{
if (auto* handler = getHandler (self))
if (handler->getCurrentState().isCheckable() && handler->getActions().invoke (AccessibilityActionType::toggle))
return YES;
return performActionIfSupported (self, AccessibilityActionType::press);
}


+ 3
- 2
modules/juce_gui_basics/native/accessibility/juce_win32_AccessibilityElement.cpp View File

@@ -189,8 +189,9 @@ JUCE_COMRESULT AccessibilityNativeHandle::GetPatternProvider (PATTERNID pId, IUn
}
case UIA_TogglePatternId:
{
if (accessibilityHandler.getActions().contains (AccessibilityActionType::toggle)
&& accessibilityHandler.getCurrentState().isCheckable())
if (accessibilityHandler.getCurrentState().isCheckable()
&& (accessibilityHandler.getActions().contains (AccessibilityActionType::toggle)
|| accessibilityHandler.getActions().contains (AccessibilityActionType::press)))
{
return new UIAToggleProvider (this);
}


+ 2
- 1
modules/juce_gui_basics/native/accessibility/juce_win32_UIAToggleProvider.h View File

@@ -44,7 +44,8 @@ public:
const auto& handler = getHandler();
if (handler.getActions().invoke (AccessibilityActionType::toggle))
if (handler.getActions().invoke (AccessibilityActionType::toggle)
|| handler.getActions().invoke (AccessibilityActionType::press))
{
VARIANT newValue;
VariantHelpers::setInt (getCurrentToggleState(), &newValue);


Loading…
Cancel
Save