summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2018-05-09 22:13:10 +0200
committerJonas Ådahl <jadahl@gmail.com>2018-05-09 22:13:10 +0200
commit7edd465f6d86674530a358a759a7f422b579351d (patch)
treed76815c0234523b72d51e3f6a493762f2e3fe1c3
parent85fa6ba63105e1a857a914bf76798ff1eda9530c (diff)
downloadgtk+-7edd465f6d86674530a358a759a7f422b579351d.tar.gz
wayland: Fix restarting cursor animation
When an animated cursor was set and the previous cursor animation delay happened to be the same, we wouldn't restart the animation timeout and just return G_SOURCE_CONTINUE assuming the timer would continue. This assumption is however only valid if the function was called from the timeout, which is not the case. Instead also arm the timer also if there is no previous timer active.
-rw-r--r--gdk/wayland/gdkdevice-wayland.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index d17b5510b8..35c1c444df 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -419,13 +419,16 @@ gdk_wayland_device_update_window_cursor (GdkDevice *device)
else
{
pointer->cursor_timeout_id = 0;
- return TRUE;
+ return G_SOURCE_REMOVE;
}
if (tablet)
{
if (!tablet->current_tool)
- return retval;
+ {
+ pointer->cursor_timeout_id = 0;
+ return G_SOURCE_REMOVE;
+ }
zwp_tablet_tool_v2_set_cursor (tablet->current_tool->wp_tablet_tool,
pointer->enter_serial,
@@ -440,7 +443,10 @@ gdk_wayland_device_update_window_cursor (GdkDevice *device)
x, y);
}
else
- return retval;
+ {
+ pointer->cursor_timeout_id = 0;
+ return G_SOURCE_REMOVE;
+ }
if (buffer)
{
@@ -462,7 +468,8 @@ gdk_wayland_device_update_window_cursor (GdkDevice *device)
if (next_image_index != pointer->cursor_image_index)
{
- if (next_image_delay != pointer->cursor_image_delay)
+ if (next_image_delay != pointer->cursor_image_delay ||
+ pointer->cursor_timeout_id == 0)
{
guint id;