[gtk/gtk-3-22: 1/2] wayland: Fix restarting cursor animation



commit 7edd465f6d86674530a358a759a7f422b579351d
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Wed May 9 22:13:10 2018 +0200

    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.

 gdk/wayland/gdkdevice-wayland.c | 15 +++++++++++----
 1 file 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;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]