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.

CSR: https://bugs.openjdk.org/browse/JDK-8307529

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

Commit messages:
 - doc changes
 - actual fix
 - Wayland detection

Changes: https://git.openjdk.org/jdk/pull/13830/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13830&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8280993
  Stats: 195 lines in 6 files changed: 181 ins; 0 del; 14 mod
  Patch: https://git.openjdk.org/jdk/pull/13830.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13830/head:pull/13830

PR: https://git.openjdk.org/jdk/pull/13830

Reply via email to