xserver: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 12 17:12:18 UTC 2019


 Xi/xipassivegrab.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

New commits:
commit f4cdbf640b6440df4af784ca35e1b1340965cc10
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed May 29 16:19:55 2019 +1000

    Xi: return AlreadyGrabbed for key grabs > 255
    
    We can't have high keycodes because everything in XKB relies on 8 bits. XI2's
    API allows for 32-bit keycodes so we have to take those but nothing in the
    server is really ready for this. The effect of this right now is that any high
    keycode grab is clipped to 255 and thus ends up grabbing a different key
    instead.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1697804
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c
index 65d5870f6..d30f51f3c 100644
--- a/Xi/xipassivegrab.c
+++ b/Xi/xipassivegrab.c
@@ -203,8 +203,14 @@ ProcXIPassiveGrabDevice(ClientPtr client)
                                 &param, XI2, &mask);
             break;
         case XIGrabtypeKeycode:
-            status = GrabKey(client, dev, mod_dev, stuff->detail,
-                             &param, XI2, &mask);
+            /* XI2 allows 32-bit keycodes but thanks to XKB we can never
+             * implement this. Just return an error for all keycodes that
+             * cannot work anyway */
+            if (stuff->detail > 255)
+                status = XIAlreadyGrabbed;
+            else
+                status = GrabKey(client, dev, mod_dev, stuff->detail,
+                                 &param, XI2, &mask);
             break;
         case XIGrabtypeEnter:
         case XIGrabtypeFocusIn:


More information about the xorg-commit mailing list