From 87d5534f701242d7c23aa20545a6292a0779c89c Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Wed, 3 Feb 2016 16:14:09 +0100 Subject: [PATCH] xwayland: Clear pending cursor frame callbacks on pointer enter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The last cursor frame we commited before the pointer left one of our surfaces might not have been shown. In that case we'll have a cursor surface frame callback pending which we need to clear so that we can continue submitting new cursor frames. Signed-off-by: Rui Matos Reviewed-by: Bryce Harrington Acked-by: Pekka Paalanen Reviewed-by: Daniel Stone Reviewed-by: Jonas Ã…dahl --- hw/xwayland/xwayland-input.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index 61ca70bac..f9e325516 100644 --- a/hw/xwayland/xwayland-input.c +++ b/hw/xwayland/xwayland-input.c @@ -267,6 +267,16 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer, for (i = 0; i < dev->button->numButtons; i++) if (BitIsOn(dev->button->down, i)) QueuePointerEvents(dev, ButtonRelease, i, 0, &mask); + + /* The last cursor frame we commited before the pointer left one + * of our surfaces might not have been shown. In that case we'll + * have a cursor surface frame callback pending which we need to + * clear so that we can continue submitting new cursor frames. */ + if (xwl_seat->cursor_frame_cb) { + wl_callback_destroy(xwl_seat->cursor_frame_cb); + xwl_seat->cursor_frame_cb = NULL; + xwl_seat_set_cursor(xwl_seat); + } } static void