RFR: 8342096: Popup menus that request focus are not shown on Linux with Wayland [v2]

Alexey Ivanov aivanov at openjdk.org
Mon Jan 20 19:58:38 UTC 2025


On Mon, 20 Jan 2025 01:08:01 GMT, Alexander Zvegintsev <azvegint at openjdk.org> wrote:

>> The previous [JDK-8319103](https://bugs.openjdk.org/browse/JDK-8319103) fix was not complete.
>> 
>> The case where a menu item with a focusable component was not a direct child of a window was missing(failing the `if (window == oppositeWindow.getParent() ) {` check), so the ungrab event was posted prematurely.
>> 
>> This can be fixed by adding `waylandWindowFocusListener` to all submenus in hierarchy.
>> 
>> The manual test updated to use this case, and also added an automated test that checks that it didn't close prematurely.
>
> Alexander Zvegintsev has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
> 
>  - Popup may not be dismissed if there are multiple focusable components
>  - NestedFocusablePopupTest review comments
>  - Merge branch 'master' into 8342096_nested_popup
>  - 8342096: Popup menus that request focus are not shown on Linux with Wayland

src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java line 557:

> 555:                             }
> 556:                             owner = owner.getOwner();
> 557:                         }

Suggestion:


                        Window owner = window.getOwner();
                        while (owner != null) {
                            if (owner == oppositeWindow) {
                                return;
                            }
                            owner = owner.getOwner();
                        }


I'd also add blank lines around this piece of code to break it into smaller pieces.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22729#discussion_r1922803162


More information about the client-libs-dev mailing list