summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <ofourdan@redhat.com>2016-03-09 10:33:50 +0100
committerOlivier Fourdan <ofourdan@redhat.com>2016-09-23 08:48:39 +0200
commit4584e97c01dce60ffebb9a314f9e5f39feed776b (patch)
treebf753f975badd5442c55f9583d4f815bb92989b0
parent699d033307b47ddf06b83cb23b52215aa7e1b695 (diff)
xwayland: sync event queue to check compositor reply
Read and dispatch pending Wayland events to make sure we do not miss a possible reply from the compositor prior to discard a key repeat. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 88e981e7088198fabea6c322c58f371d91578b6a)
-rw-r--r--hw/xwayland/xwayland-input.c3
-rw-r--r--hw/xwayland/xwayland.c7
-rw-r--r--hw/xwayland/xwayland.h2
3 files changed, 12 insertions, 0 deletions
diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
index e2b1c7d21..609f69199 100644
--- a/hw/xwayland/xwayland-input.c
+++ b/hw/xwayland/xwayland-input.c
@@ -567,6 +567,9 @@ keyboard_check_repeat (DeviceIntPtr dev, XkbSrvInfoPtr xkbi, unsigned key)
struct wl_callback *callback;
struct sync_pending *p;
+ /* Make sure we didn't miss a possible reply from the compositor */
+ xwl_sync_events (xwl_screen);
+
xorg_list_for_each_entry(p, &xwl_seat->sync_pending, l) {
if (p->pending_dev == dev) {
ErrorF("Key repeat discarded, Wayland compositor doesn't "
diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
index b4e40f49b..f01ec57fa 100644
--- a/hw/xwayland/xwayland.c
+++ b/hw/xwayland/xwayland.c
@@ -518,6 +518,13 @@ block_handler(void *data, struct timeval **tv, void *read_mask)
xwl_dispatch_events (xwl_screen);
}
+void
+xwl_sync_events (struct xwl_screen *xwl_screen)
+{
+ xwl_dispatch_events (xwl_screen);
+ xwl_read_events (xwl_screen);
+}
+
static CARD32
add_client_fd(OsTimerPtr timer, CARD32 time, void *arg)
{
diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
index 316500db7..7f4bc5def 100644
--- a/hw/xwayland/xwayland.h
+++ b/hw/xwayland/xwayland.h
@@ -155,6 +155,8 @@ struct xwl_output {
struct xwl_pixmap;
+void xwl_sync_events (struct xwl_screen *xwl_screen);
+
Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen);
struct xwl_screen *xwl_screen_get(ScreenPtr screen);