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

Marked as reviewed by serb (Reviewer).

-------------

PR Review: https://git.openjdk.org/jdk/pull/29630#pullrequestreview-3781167232

Reply via email to