xserver: Branch 'xwayland-22.1'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 2 08:56:10 UTC 2022


 hw/xwayland/xwayland-input.c |    3 ---
 1 file changed, 3 deletions(-)

New commits:
commit dc4d11abfa8440512800137eddfe05b28445bb4f
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Mon Oct 24 09:24:01 2022 +0200

    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 at 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 at gmail.com>
    Tested-by: Stefan Dirsch <sndirsch at suse.de>
    Acked-by: Michel Dänzer <mdaenzer at redhat.com>
    (cherry picked from commit 459e2855730a30bb50f4836f2ff6153841bf843c)

diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
index ec40d110c..34dd3c8bb 100644
--- a/hw/xwayland/xwayland-input.c
+++ b/hw/xwayland/xwayland-input.c
@@ -1030,9 +1030,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)


More information about the xorg-commit mailing list