From 35c5664fd40b0614cd7c43679809c42e1918cda2 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Tue, 19 Oct 2021 17:59:01 +0200 Subject: [PATCH] xwayland: Clear tablet cursor pending frame cb If the tablet tool is moved out of proximity before the cursor's pending frame callback is received, any further attempts to update the cursor will fail because the frame callback is still pending. Make sure to clear any cursor pending frame when the tool gets in proximity again, similar to what we do when the pointer re-enters a surface, so that the cursor updates aren't discarded. Signed-off-by: Olivier Fourdan See-also: https://gitlab.gnome.org/GNOME/mutter/-/issues/1969 Reviewed-by: Carlos Garnacho --- hw/xwayland/xwayland-input.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index 8482c89ae..80000ea9e 100644 --- a/hw/xwayland/xwayland-input.c +++ b/hw/xwayland/xwayland-input.c @@ -1677,6 +1677,13 @@ tablet_tool_proximity_in(void *data, struct zwp_tablet_tool_v2 *tool, xwl_tablet_tool->proximity_in_serial = serial; xwl_seat->tablet_focus_window = wl_surface_get_user_data(wl_surface); + /* If there is a cursor surface frame callback pending, we need to clear it + * so that we can continue submitting new cursor frames. + */ + if (xwl_tablet_tool->cursor.frame_cb) { + wl_callback_destroy(xwl_tablet_tool->cursor.frame_cb); + xwl_tablet_tool->cursor.frame_cb = NULL; + } xwl_tablet_tool_set_cursor(xwl_tablet_tool); }