summaryrefslogtreecommitdiffstats
path: root/source/x/xorg-server-xwayland/987.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/x/xorg-server-xwayland/987.patch')
-rw-r--r--source/x/xorg-server-xwayland/987.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/source/x/xorg-server-xwayland/987.patch b/source/x/xorg-server-xwayland/987.patch
new file mode 100644
index 000000000..2133ee171
--- /dev/null
+++ b/source/x/xorg-server-xwayland/987.patch
@@ -0,0 +1,50 @@
+From 914e2276df86b7e93ca37e4e87346d38cb80db05 Mon Sep 17 00:00:00 2001
+From: Olivier Fourdan <ofourdan@redhat.com>
+Date: Mon, 24 Oct 2022 09:24:01 +0200
+Subject: [PATCH] xwayland/input: Do not ignore leave events
+
+Commit 8a5f3ddb2 ("set tag on our surface") introduced the use of tags
+to differentiate our own surfaces, and commit a1d14aa8c ("Clear the
+"xwl-window" tag on unrealize") removed the tags before the surfaces are
+actually destroyed.
+
+Xwayland would then rely on these tags on the surface to decide whether
+to ignore or to process the Wayland event in various places.
+
+However, in doing so, it also checked for the tag on keyboard leave
+events.
+
+As a result, if the keyboard leave events is received after the X11
+window is unrealized, keyboard_handle_leave() would not queue the
+LeaveNotify events for the DIX to proceed, and the key repeat would
+kick in and repeat the key event indefinitely.
+
+To avoid the issue, process events regardless of the tag as before
+in keyboard_handle_leave().
+
+Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
+Fixes: 8a5f3ddb2 - "xwayland: set tag on our surface"
+Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1395
+Tested-by: Renan Guilherme Lebre Ramos <japareaggae@gmail.com>
+Tested-by: Stefan Dirsch <sndirsch@suse.de>
+---
+ hw/xwayland/xwayland-input.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
+index 240eb0139..9eda1ef71 100644
+--- a/hw/xwayland/xwayland-input.c
++++ b/hw/xwayland/xwayland-input.c
+@@ -1147,9 +1147,6 @@ keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
+ struct xwl_seat *xwl_seat = data;
+ uint32_t *k;
+
+- if (surface != NULL && !is_surface_from_xwl_window(surface))
+- return;
+-
+ xwl_seat->xwl_screen->serial = serial;
+
+ wl_array_for_each(k, &xwl_seat->keys)
+--
+GitLab
+