On Tue, 10 Feb 2026 01:07:46 GMT, Jeremy Wood <[email protected]> wrote:
>> This PR prevents VoiceOver from letting me navigate the VoiceOver cursor to >> hidden components. >> >> ### Technical Details >> >> VoiceOver is responsible for a call to >> `CAccessibility.getChildrenAndRoles(JFrame, JFrame, JAVA_AX_ALL_CHILDREN, >> false)`. >> >> That last boolean is `allowIgnored`. >> >> When `allowedIgnored == false` we already omitted certain components based >> on their AccessibleRole. This PR expands our definition of "what should be >> ignored" to include invisible Components. >> >> ### Other Considerations >> >> 1. Originally I thought the resolution to this problem would be to change >> JAVA_AX_ALL_CHILDREN to JAVA_AX_VISIBLE_CHILDREN . And maybe that's still a >> viable option, but after some research I've come to believe it's >> simpler/appropriate to change our definition of "ignored". >> 2. NSViews have a separate property `isHidden`. Another approach to this >> ticket might be to try to assign `myNSView.isHidden = >> !myJavaComponent.isVisible()`. Some reading suggests that this might (?) >> automatically resolve this ticket. > > Jeremy Wood has updated the pull request incrementally with two additional > commits since the last revision: > > - 8377428: simplify test instructions > > Now that there are other interesting components in the UI: we don't need > to press CTRL + ALT + UP. > - 8377428: test condition where axComp is null > > If AccessibleComponent is null, when the new CAccessibility.isShowing(..) > method falls back to consulting the AccessibleStateSet. > > This change makes sure we follow that code path, too. > > When I checked CAccessibility.isShowing() in the debugger, I observed: > > For "row 1": we had an AccessibleComponent where isShowing() is false > > For "row 2": we had a no AccessibleComponent. We checked the > AccessibleStateSelection and did not see SHOWING, so > CAccessibility.isShowing(context) returned TRUE. This is not accurate, but > it's working as designed. We had incomplete information, and we're supposed > to err on the side of returning true (to minimize invasive risk). Meanwhile: > the test still passes, because then _addChildren recursively inspects the > JButton, and CAccessibility.isShowing(buttonContext) returns false. > > For "row 3": we had an AccessibleComponent where isShowing() is true. > > For "row 4": we had no AccessibleComponent. We checked > AccessibleStateSelection and DID see SHOWING, so we returned true. > > This is in response to: > https://github.com/openjdk/jdk/pull/29630#discussion_r2784969123 Seems to be working fine - i haven't noticed any regressions due to this change. ------------- Marked as reviewed by kizune (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/29630#pullrequestreview-3787129622
