[PATCH xserver] xwayland: do not set checkRepeat on master kbd

Olivier Fourdan ofourdan at redhat.com
Wed Mar 1 07:51:31 UTC 2017


If a key event is sent programmatically, the virtual core keyboard does
not have its dev->public.devicePrivate set and we can't get the Xwayland
seat, in which case we end up crashing in keyboard_check_repeat().

This is the case with "antimicro" which sends key events based on the
joystick buttons.

Adding the checkRepeat handler on the VCK is useless anyway, so remove
it and avoid the crash in keyboard_check_repeat() when trying to get the
Xwayland seat.

Bugzilla: https://bugzilla.redhat.com/1416244
Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
---
 v2: Avoid the crash by not setting the checkRepeat handler on the master
     keyboard - For some reason, I was convinced it was needed when I sent
     the patch for commit 239705a (xwayland: add a server sync before
     repeating keys) but on further consideration, I don't see how it 
     could be, considering we cannot get to the xwl seat anyway.
     Checked that removing it does not affect the key repeat mechanism
     when the compositor is busy, it works equally well without this so
     all is fine... My bad, thanks Peter!

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

diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
index 2ca99d9..1f5d323 100644
--- a/hw/xwayland/xwayland-input.c
+++ b/hw/xwayland/xwayland-input.c
@@ -1027,8 +1027,6 @@ release_relative_pointer(struct xwl_seat *xwl_seat)
 static void
 init_keyboard(struct xwl_seat *xwl_seat)
 {
-    DeviceIntPtr master;
-
     xwl_seat->wl_keyboard = wl_seat_get_keyboard(xwl_seat->seat);
     wl_keyboard_add_listener(xwl_seat->wl_keyboard,
                              &keyboard_listener, xwl_seat);
@@ -1040,9 +1038,6 @@ init_keyboard(struct xwl_seat *xwl_seat)
     }
     EnableDevice(xwl_seat->keyboard, TRUE);
     xwl_seat->keyboard->key->xkbInfo->checkRepeat = keyboard_check_repeat;
-    master = GetMaster(xwl_seat->keyboard, MASTER_KEYBOARD);
-    if (master)
-        master->key->xkbInfo->checkRepeat = keyboard_check_repeat;
 }
 
 static void
-- 
2.9.3



More information about the xorg-devel mailing list