diff --git a/modules/juce_gui_basics/native/accessibility/juce_Accessibility_mac.mm b/modules/juce_gui_basics/native/accessibility/juce_Accessibility_mac.mm index 8175e94d38..d0dd6eb379 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_Accessibility_mac.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_Accessibility_mac.mm @@ -792,8 +792,18 @@ private: for (auto* childHandler : children) [accessibleChildren addObject: static_cast (childHandler->getNativeImplementation())]; - if (auto* nativeChild = AccessibilityHandler::getNativeChildForComponent (handler->getComponent())) - [accessibleChildren addObject: static_cast (nativeChild)]; + if (id nativeChild = static_cast (AccessibilityHandler::getNativeChildForComponent (handler->getComponent()))) + { + // Having both native and non-native children would require implementing an + // ordering. However, this situation doesn't occur with any of our current + // use-cases. + jassert ([accessibleChildren count] == 0); + + if ([nativeChild isAccessibilityElement]) + [accessibleChildren addObject:nativeChild]; + else if (auto* childrenOfChild = [nativeChild accessibilityChildren]; childrenOfChild != nil) + [accessibleChildren addObjectsFromArray:(NSArray* _Nonnull) childrenOfChild]; + } return accessibleChildren; }