RFR: 8280993: [XWayland] Popup is not closed on click outside of area controlled by XWayland [v2]

Phil Race prr at openjdk.org
Thu May 18 22:34:55 UTC 2023


On Tue, 9 May 2023 18:01:31 GMT, Alexander Zvegintsev <azvegint at openjdk.org> wrote:

>> On Linux systems, we rely on XGrabPointer (X11 API) to capture mouse input and dismiss popup menus on mouse clicks outside the popup menu.
>> Unfortunately, on Linux systems using the [Wayland](https://wayland.freedesktop.org/) session this only works inside [XWayland(Wayland's X11 server implementation)](https://wayland.freedesktop.org/xserver.html).
>> This means if a user clicks on a part of the screen not controlled by XWayland (e.g. window decorations, other non X11 applications) the popup menu will not be hidden.
>> 
>> As a workaround, we can hide this menu when the parent popup menu window loses focus.
>> However, it does have its drawbacks, which should be described in the documentation.The focus does not change when clicking on the header of its own parent window or on non-focusable windows, .e.g., empty space in system dock, so in this case the popup menu is not hidden.
>> 
>> Third-party applications use a similar approach.
>> 
>> I also have doubts about the need to change the documentation, as I can't find where it is described that the popup menu should be hidden when clicked outside the menu.
>> 
>> <del>CSR: https://bugs.openjdk.org/browse/JDK-8307529</del>
>
> Alexander Zvegintsev has updated the pull request incrementally with one additional commit since the last revision:
> 
>   undo documentation changes

src/java.desktop/share/classes/java/awt/PopupMenu.java line 49:

> 47:  * by clicking on the decorations of its own parent window
> 48:  * and on some system panels.
> 49:  *

I think I agree with others that its questionable if we need to say this at all.
It would be odd to specify the places you can click to dismiss a popup, so unless
we already do that, we don't need to start now.

src/java.desktop/share/classes/javax/swing/JPopupMenu.java line 767:

> 765:     }
> 766: 
> 767:     // We rely on the X11 input grab mechanism, but for the Wayland session

Whilst we need to do this, having all this code discussing Wayland here in JPopupMenu is really the wrong place.
This needs to be re-done in a way that is about the specific problem which is something like
SunToolkit.clickOutsideWillDismissPopup() 
and the word "Wayland" shouldn't appear anywhere here.

IIUC this fix is needed so that a number of tests that fail now because of this problem will be able to pass, so it would be good to get it in soon so I can get a clearer picture of what remaining test issues we have.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13830#discussion_r1187870382
PR Review Comment: https://git.openjdk.org/jdk/pull/13830#discussion_r1198364501



More information about the client-libs-dev mailing list