[gtk+] scalebutton: Handle smooth scroll events



commit bb3a8edb9f21e486f1972c72c4a4090af790e7d7
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Aug 22 19:15:57 2014 +0200

    scalebutton: Handle smooth scroll events
    
    This has the double effect to make scale button truly smooth, and make
    scrolling work on wayland, since all scrolling is "smooth" there.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=720269

 gtk/gtkscalebutton.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c
index c979f61..24976b0 100644
--- a/gtk/gtkscalebutton.c
+++ b/gtk/gtkscalebutton.c
@@ -357,7 +357,7 @@ gtk_scale_button_init (GtkScaleButton *button)
   /* Need a local reference to the adjustment */
   g_object_ref (priv->adjustment);
 
-  gtk_widget_add_events (GTK_WIDGET (button), GDK_SCROLL_MASK);
+  gtk_widget_add_events (GTK_WIDGET (button), GDK_SMOOTH_SCROLL_MASK);
 }
 
 static void
@@ -786,12 +786,18 @@ gtk_scale_button_scroll (GtkWidget      *widget,
       if (d > gtk_adjustment_get_upper (adjustment))
        d = gtk_adjustment_get_upper (adjustment);
     }
-  else
+  else if (event->direction == GDK_SCROLL_DOWN)
     {
       d -= gtk_adjustment_get_step_increment (adjustment);
       if (d < gtk_adjustment_get_lower (adjustment))
        d = gtk_adjustment_get_lower (adjustment);
     }
+  else if (event->direction == GDK_SCROLL_SMOOTH)
+    {
+      d += event->delta_y * gtk_adjustment_get_step_increment (adjustment);
+      d = CLAMP (d, gtk_adjustment_get_lower (adjustment),
+                 gtk_adjustment_get_upper (adjustment));
+    }
   gtk_scale_button_set_value (button, d);
 
   return TRUE;


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