[PATCH xserver] xwayland: Do not assume we have a seat
Olivier Fourdan
ofourdan at redhat.com
Tue Feb 28 08:46:55 UTC 2017
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 at 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
More information about the xorg-devel
mailing list