From 285761c56cb5fa3dc5dddf285ccd2496ea46999e Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 30 Jun 2022 15:26:20 +0100 Subject: [PATCH] Accessibility: Fix hit test behaviour on iOS --- .../accessibility/juce_ios_Accessibility.mm | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm index 656aac0060..cb6270534f 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm @@ -50,8 +50,6 @@ static NSArray* getContainerAccessibilityElements (AccessibilityHandler& handler NSMutableArray* accessibleChildren = [NSMutableArray arrayWithCapacity: (NSUInteger) children.size()]; - [accessibleChildren addObject: (id) handler.getNativeImplementation()]; - for (auto* childHandler : children) { id accessibleElement = [&childHandler] @@ -68,6 +66,8 @@ static NSArray* getContainerAccessibilityElements (AccessibilityHandler& handler [accessibleChildren addObject: accessibleElement]; } + [accessibleChildren addObject: (id) handler.getNativeImplementation()]; + return accessibleChildren; } @@ -186,7 +186,21 @@ private: AccessibilityElement (Type elementType) { - addMethod (@selector (isAccessibilityElement), getIsAccessibilityElement); + addMethodWithReturn (@selector (isAccessibilityElement), [] (id self, SEL) + { + auto* handler = getHandler (self); + + if (handler == nullptr) + return false; + + return ! handler->isIgnored() + && handler->getRole() != AccessibilityRole::window + && (handler->getTitle().isNotEmpty() + || handler->getDescription().isNotEmpty() + || handler->getHelp().isNotEmpty() + || handler->getValueInterface() != nullptr); + }); + addMethod (@selector (accessibilityContainer), getAccessibilityContainer); addMethod (@selector (accessibilityFrame), getAccessibilityFrame); addMethod (@selector (accessibilityTraits), getAccessibilityTraits); @@ -235,6 +249,9 @@ private: } private: + template + void addMethodWithReturn (SEL selector, Method method) { addMethod (selector, static_cast (method)); } + //============================================================================== static UIAccessibilityElement* getContainer (id self) {