xserver-multidpi/hw/xwayland
Olivier Fourdan c7730cfe55 xwayland: Translate keyboard grabs on the root window
When an X11 client issues an active grab on the keyboard, Xwayland
forward this to the Wayland compositor using the Xwayland specific
protocol "xwayland-keyboard-grab" if it can find the corresponding
Xwayland window.

Some X11 clients (typically older games) however try to issue the
keyboard grab on the X11 root window, which has obviously no matching
Xwayland window. In such a case, the grab is simply ignored and the game
will not work as expected.

To workaround that issue, if an X11 client issues a keyboard grab on the
root window, Xwayland will search for a toplevel window belonging to the
same X11 client that it can use as the grab window instead.

This way, the grab can be forwarded to the Wayland compositor that can
either grant or deny the request based on the window and its internal
policies.

The heuristic picks the first realized toplevel window belonging to the
client so that the Wayland compositor will send it the keyboard events,
and the Xserver grab mechanism will then take care of routing the events
to the expected X11 window by itself.

v2: Make the test more clear (Dor Askayo <dor.askayo@gmail.com>)

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Jonas Ådahl <jadahl@gmail.com>
See-also: https://gitlab.gnome.org/GNOME/mutter/-/issues/1249
2021-02-02 09:49:35 +00:00
..
man xwayland: Add -verbose option as in xfree86 2021-01-29 10:02:14 +00:00
.gitignore xwayland: Add wp_viewport wayland extension support 2019-10-12 12:19:14 +02:00
drm.xml wayland: Sync drm.xml with Mesa 2017-07-05 10:13:04 -04:00
Makefile.am mi: List extensions in usage message 2021-01-29 12:52:09 +00:00
meson.build mi: List extensions in usage message 2021-01-29 12:52:09 +00:00
xwayland-cursor.c xwayland: Hold cursor buffer until released 2020-12-10 13:49:42 +01:00
xwayland-cursor.h xwayland: Move Xwayland cursor declarations 2019-12-20 16:19:01 +01:00
xwayland-cvt.c xwayland: Cleanup and remove xwayland.h 2019-12-20 16:19:01 +01:00
xwayland-cvt.h xwayland: Move Xwayland CVT declaration 2019-12-20 16:19:01 +01:00
xwayland-glamor-eglstream.c xwayland: remove unused parameter of xwl_glamor_pixmap_get_wl_buffer 2021-01-08 06:17:51 -08:00
xwayland-glamor-gbm.c xwayland: remove unused parameter of xwl_glamor_pixmap_get_wl_buffer 2021-01-08 06:17:51 -08:00
xwayland-glamor-xv.c xwayland: Cleanup and remove xwayland.h 2019-12-20 16:19:01 +01:00
xwayland-glamor.c xwayland: remove unused parameter of xwl_glamor_pixmap_get_wl_buffer 2021-01-08 06:17:51 -08:00
xwayland-glamor.h xwayland: remove unused parameter of xwl_glamor_pixmap_get_wl_buffer 2021-01-08 06:17:51 -08:00
xwayland-glx.c xwayland: Set the vendor name for GLX_EXT_libglvnd 2020-06-05 14:50:55 -04:00
xwayland-glx.h xwayland: Move Xwayland GLX declaration 2019-12-20 16:19:01 +01:00
xwayland-input.c xwayland: Translate keyboard grabs on the root window 2021-02-02 09:49:35 +00:00
xwayland-input.h xwayland: Move Xwayland cursor declarations 2019-12-20 16:19:01 +01:00
xwayland-output.c xwayland: Replace need_rotate boolean with simple check on xdg-output 2020-09-01 13:13:57 +00:00
xwayland-output.h xwayland: Move Xwayland output declarations 2019-12-20 16:19:01 +01:00
xwayland-pixmap.c xwayland: Rename xwl_pixmap_cb → xwl_buffer_release_cb 2020-07-07 13:47:11 +00:00
xwayland-pixmap.h xwayland: Rename xwl_pixmap_cb → xwl_buffer_release_cb 2020-07-07 13:47:11 +00:00
xwayland-present.c xwayland: remove unused parameter of xwl_glamor_pixmap_get_wl_buffer 2021-01-08 06:17:51 -08:00
xwayland-present.h xwayland: Rename present event lists 2020-07-22 11:01:42 +02:00
xwayland-screen.c xwayland: non-rootless requires the XDG-WM-Base protocol 2020-11-09 08:48:16 +00:00
xwayland-screen.h xwayland: Fix infinite loop at startup 2020-04-27 11:42:13 +02:00
xwayland-shm.c xwayland: Remove harmless duplicated #include 2020-07-20 00:19:22 +00:00
xwayland-shm.h xwayland: Move SHM declarations to their own header 2019-12-20 16:19:01 +01:00
xwayland-types.h xwayland: Move Xwayland structures to their own header 2019-12-20 16:19:01 +01:00
xwayland-vidmode.c xwayland: Initialise values in xwlVidModeGetGamma() 2020-07-03 10:56:43 +00:00
xwayland-vidmode.h xwayland: Move Xwayland vidmode declaration 2019-12-20 16:19:01 +01:00
xwayland-window-buffers.c xwayland: Hold window buffer until released 2020-12-10 13:49:42 +01:00
xwayland-window-buffers.h xwayland: Cleanup and remove xwayland.h 2019-12-20 16:19:01 +01:00
xwayland-window.c xwayland: remove unused parameter of xwl_glamor_pixmap_get_wl_buffer 2021-01-08 06:17:51 -08:00
xwayland-window.h xwayland: port rooted xwayland from wl_shell to xdg-shell protocol 2020-02-28 16:23:58 +00:00
xwayland.c xwayland: Add -verbose option as in xfree86 2021-01-29 10:02:14 +00:00
xwayland.pc.in xwayland: Add -verbose option as in xfree86 2021-01-29 10:02:14 +00:00