On Tue, 3 Nov 2026 22:24:50 GMT, Andy Goryachev <[email protected]> wrote:
>> Querying native accessibility children from accessibilityIsIgnored can cause >> AppKit to walk up the ancestor hierarchy and query the same window’s ignored >> status again, resulting in infinite recursion that causes a >> StackOverflowError. The error may go unnoticed during normal execution >> because the native code clears pending Java exceptions, while an exception >> breakpoint in a debug session exposes the StackOverflowError before it is >> cleared. >> >> The fix introduces a Java method that traverses the JavaFX accessibility >> children directly and reports whether the hierarchy contains context-menu or >> tooltip content. The native peer uses this result to determine whether the >> window should be ignored, without requesting native unignored children. >> >> The original child query also initialized descendant accessibility peers so >> that VoiceOver could discover the menu content. The replacement preserves >> this behavior by initializing every peer encountered during traversal and >> continuing through all descendants even after finding a matching role. >> >> >> >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > modules/javafx.graphics/src/main/java/com/sun/glass/ui/mac/MacAccessible.java > line 896: > >> 894: ObservableList<Node> children = >> (ObservableList<Node>)accessible.getAttribute(CHILDREN); >> 895: if (children != null) { >> 896: for (Node child : children) { > > should you check `isVisible()` on each child? Not really - we need to come down to all the children to trigger their a11y peers being initialized - otherwise VO might report an incorrect number of children. ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/2360#discussion_r4461598741
