wayland: Fix restarting cursor animation
authorJonas Ådahl <jadahl@gmail.com>
Wed, 9 May 2018 20:13:10 +0000 (22:13 +0200)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 9 May 2018 20:17:03 +0000 (22:17 +0200)
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.

gdk/wayland/gdkdevice-wayland.c

index edeb32f283e9fb4e3c65d6a0160f7fdb9de87f67..fc7019b8a8b8d77ea8824fb1e34dbeb720d29f21 100644 (file)
@@ -405,13 +405,16 @@ gdk_wayland_device_update_surface_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,
@@ -426,7 +429,10 @@ gdk_wayland_device_update_surface_cursor (GdkDevice *device)
                              x, y);
     }
   else
-    return retval;
+    {
+      pointer->cursor_timeout_id = 0;
+      return G_SOURCE_REMOVE;
+    }
 
   if (buffer)
     {
@@ -450,7 +456,8 @@ gdk_wayland_device_update_surface_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;