Hi Peter, > what device is this called for? quick skim of the xwayland sources indicates > that a device is only created if we have a seat, so I wonder if the repeat is > called for the wrong device here?
The keyboard_check_repeat() handler is called directly from AccessXRepeatKeyExpire() [1]. It's set in init_keyboard() [2] on the seat's keyboard and on the master keyboard as well. IIRC that was needed otherwise the keyboard_check_repeat() would not avoid spurious key repeats in all cases when the compositor becomes "busy". The device that causes the issue is the virtual core keyboard: (gdb) bt #0 keyboard_check_repeat (dev=0x3092040, xkbi=0x30932b0, key=111) at xwayland-input.c:751 #1 0x00000000005245e7 in AccessXRepeatKeyExpire ( timer=<optimized out>, now=<optimized out>, arg=0x3092040) at xkbAccessX.c:321 #2 0x000000000058aa40 in DoTimer (timer=0x35fc3c0, now=now@entry=68761551) at WaitFor.c:294 #3 0x000000000058aab8 in DoTimers (now=68761551) at WaitFor.c:308 #4 0x000000000058adf7 in check_timers () at WaitFor.c:151 #5 WaitForSomething (are_ready=<optimized out>) at WaitFor.c:217 #6 0x000000000055660a in Dispatch () at dispatch.c:422 #7 0x000000000055a858 in dix_main (argc=10, argv=0x7fffc3408528, envp=<optimized out>) at main.c:287 #8 0x00007fda223c7401 in __libc_start_main (main=0x423d80 <main>, argc=10, argv=0x7fffc3408528, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffc3408518) at ../csu/libc-start.c:289 #9 0x0000000000423dba in _start () (gdb) p *dev $2 = {public = {devicePrivate = 0x0, processInputProc = 0x52c870 <ProcessKeyboardEvent>, realInputProc = 0x52c870 <ProcessKeyboardEvent>, enqueueInputProc = 0x55fa10 <EnqueueEvent>, on = 0}, next = 0x309fff0, startup = 1, deviceProc = 0x54a820 <CoreKeyboardProc>, inited = 1, enabled = 1, coreEvents = 1, deviceGrab = {grabTime = {months = 0, milliseconds = 86921}, fromPassiveGrab = 0, implicitGrab = 0, unused = 0x0, grab = 0x0, activatingKey = 0 '\000', ActivateGrab = 0x566bd0 <ActivateKeyboardGrab>, DeactivateGrab = 0x566f90 <DeactivateKeyboardGrab>, sync = { frozen = 0, state = 0, other = 0x0, event = 0x3092400}}, type = 2, xinput_type = 0, name = 0x30926a0 "Virtual core keyboard", id = 3, key = 0x30931c0, valuator = 0x0, touch = 0x0, button = 0x0, focus = 0x309f380, proximity = 0x0, kbdfeed = 0x3093240, ptrfeed = 0x0, intfeed = 0x0, stringfeed = 0x0, bell = 0x0, leds = 0x0, xkb_interest = 0x3714540, config_info = 0x0, unused_classes = 0x30926c0, saved_master_id = 0, devPrivates = 0x30923d0, unwrapProc = 0x52ae60 <xkbUnwrapProc>, spriteInfo = 0x3092398, master = 0x0, lastSlave = 0x30a0650, last = {valuators = {0 <repeats 36 times>}, numValuators = 0, slave = 0x30a0650, scroll = 0x0, num_touches = 0, touches = 0x0}, properties = {properties = 0x3092610, handlers = 0x3092670}, relative_transform = {m = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}}, scale_and_transform = {m = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}}, xtest_master_id = 0, idle_counter = 0x309f5d0} Cheers, Olivier [1] https://cgit.freedesktop.org/xorg/xserver/tree/xkb/xkbAccessX.c#n312 [2] https://cgit.freedesktop.org/xorg/xserver/tree/hw/xwayland/xwayland-input.c#n1021 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel