Stefan Dirsch
135c2fa712
* fixes xwayland issue#1397, issue#1395 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xwayland?expand=0&rev=34
49 lines
1.7 KiB
Diff
49 lines
1.7 KiB
Diff
From bd39c17e2398f82910978ed55ac772c67d8f940a 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
|
|
---
|
|
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
|
|
|