From 12fdf6bad82488f4dd692bc2efb62223bbb3419c Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 29 Jun 2022 19:46:25 +0100 Subject: [PATCH] Accessibility: Stop AccessibilityContainers from also being instances of AccessibilityElement --- .../native/accessibility/juce_ios_Accessibility.mm | 14 ++++++++------ .../juce_mac_AccessibilitySharedCode.mm | 3 +-- 2 files changed, 9 insertions(+), 8 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 e1a5d1d171..656aac0060 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm @@ -58,7 +58,7 @@ static NSArray* getContainerAccessibilityElements (AccessibilityHandler& handler { id native = (id) childHandler->getNativeImplementation(); - if (childHandler->getChildren().size() > 0) + if (! childHandler->getChildren().empty()) return [native accessibilityContainer]; return native; @@ -87,7 +87,7 @@ public: private: //============================================================================== - class AccessibilityContainer : public ObjCClass + class AccessibilityContainer : public ObjCClass { public: AccessibilityContainer() @@ -249,17 +249,19 @@ private: if (handler->getComponent().isOnDesktop()) return (id) handler->getComponent().getWindowHandle(); - if (handler->getChildren().size() > 0) + if (! handler->getChildren().empty()) { if (UIAccessibilityElement* container = getContainer (self)) return container; static AccessibilityContainer cls; - id windowHandle = (id) handler->getComponent().getWindowHandle(); - UIAccessibilityElement* container = [cls.createInstance() initWithAccessibilityContainer: windowHandle]; + auto* parentWithChildren = handler->getParent(); - [container retain]; + while (parentWithChildren != nullptr && parentWithChildren->getChildren().empty()) + parentWithChildren = parentWithChildren->getParent(); + + id container = cls.createInstance(); object_setInstanceVariable (container, "handler", handler); object_setInstanceVariable (self, "container", container); diff --git a/modules/juce_gui_basics/native/accessibility/juce_mac_AccessibilitySharedCode.mm b/modules/juce_gui_basics/native/accessibility/juce_mac_AccessibilitySharedCode.mm index d949e04ace..770d68f780 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_mac_AccessibilitySharedCode.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_mac_AccessibilitySharedCode.mm @@ -107,8 +107,7 @@ protected: static BOOL getIsAccessibilityElement (id self, SEL) { if (auto* handler = getHandler (self)) - return ! handler->isIgnored() - && handler->getRole() != AccessibilityRole::window; + return ! handler->isIgnored() && handler->getRole() != AccessibilityRole::window; return NO; }