RFR: 8341311: [Accessibility, macOS, VoiceOver] VoiceOver announces incorrect number of items in submenu of JPopupMenu

Mikhail Yankelevich myankelevich at openjdk.org
Tue May 27 18:59:56 UTC 2025


On Tue, 27 May 2025 17:01:16 GMT, Abhishek Kumar <abhiscxk at openjdk.org> wrote:

> VoiceOver announce incorrect number of child for a submenu of JPopupMenu when it is visible for the first time only. After that VO is able to announce the number of items correctly.
> 
> Issue: Problem is with the a11y subsystem method call to get the accessible children details.
> 
> Analysis: When the Submenu of a JPopupMenu is opened, accessible component of PopupMenu is created dynamically in the native side implementation and `PostMenuOpened` notification is sent to the a11y subsystem for the newly created PopupMenu. Once the notification is sent to a11y sub-system, it invokes the `accessibilityChildren` method to get the children details for the menu component. A11y subsystem always retrieve the information of the root level PopupMenu irrespective of the submenu's PopupMenu (PopupMenu is associated with each JMenu) and thus announce the root level PopupMenu child count which is incorrect.
> 
> Proposed Fix: Proposed fix is to ensure the correct child details are sent back to a11y sub-system for correct announcement. So, whenever the `accessibilityChildren` method is invoked, first try to find out the current accessible PopupMenu which is opened for the Submenu and then return the child details.
> 
> Testing : Manual test case is attached to verify the fix and there is no failure with fix in CI pipeline.
> 
> `Current fix also ensures the correct child counts are announced for the JMenu's Submenu which are present in the JMenubar.`
> 
> **Note :** While verifying the fix, a new issue is unearthed for multi-level submenu where VO is failed to announce the Submenu's text. Since the issue exists without the proposed fix too, it shall be treated as a new bug finding and will raise a separate JBS issue.

test/jdk/javax/accessibility/TestPopupMenuChildCount.java line 42:

> 40:  */
> 41: 
> 42: public class TestPopupMenuChildCount {

Nitpick: as far as I understand, this is for macOS only. Do you think it would make more sense to have a name mention that the test is Mac only? The same for test description. Seems to me a bit confusing otherwise 

It's fine with me if you leave it as it is though.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25470#discussion_r2109947825


More information about the client-libs-dev mailing list