[PATCH xserver 0/2] RFC: Sync key repeat with Wayland compositor

Olivier Fourdan ofourdan at redhat.com
Mon Mar 7 17:44:59 UTC 2016


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



More information about the xorg-devel mailing list