summaryrefslogtreecommitdiff
path: root/hw/xwayland/xwayland-input.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xwayland/xwayland-input.c')
-rw-r--r--hw/xwayland/xwayland-input.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
index 7494e6332..23e138d53 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