Key repeat is handled by the X server, but for Wayland, the key press/release events need to be processed and forwarded by the Wayland compositor first.
If the Wayland compositor get stuck for whatever reason and does not process the key release event fast enough, this may cause the Xwayland server to generate spurious key repeat events. That actually can lead to a complete hang of both the Wayland compositor and Xwayland as seen in the following GNOME bug: https://bugzilla.gnome.org/show_bug.cgi?id=762618 Basically, what happens here is that the Wayland compositor takes longer to actually process the fullscreen/unfullscreen transition than the repeat delay. As a result, while the user has released the F11 key that triggers the fullscreen/unfullscreen transition, the Wayland compositor is stuck is a graphical operation and cannot process the key release events, which triggers the auto-repeat in Xwayland, and therefore cause even more fullscreen transitions. Only way out here is to kill the Xwayland application and wait for the queued up event to clear out... While this is arguably a bug in the Wayland compositor, there is no way that I can think of to guarantee that this cannot happen. One possiblity to mitigate the problem is to block the key repeat until we are sure the Wayland compositor is actually processing events. The idea comes from a similar patch for gtk+ by Ray Strode here: https://bug757942.bugzilla-attachments.gnome.org/attachment.cgi?id=322876 from bug https://bugzilla.gnome.org/show_bug.cgi?id=757942 While the following patches do fix the issue in my case, they are not perfect and only a mitigation of the problem (e.g. they could easily be defeated by a Wayland compositor that would have different priority for Wayland protocol and input processing), that's why I send these couple of patches as an RFC for now. Cheers, Olivier Olivier Fourdan (2): xkb: add hook to allow/deny AccessX key repeat xwayland: add a server sync before repeating keys hw/xwayland/xwayland-input.c | 36 ++++++++++++++++++++++++++++++++++++ include/xkbsrv.h | 6 ++++++ xkb/xkbAccessX.c | 4 +++- 3 files changed, 45 insertions(+), 1 deletion(-) -- 2.5.0 _______________________________________________ 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