diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-08-22 19:15:57 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2014-08-26 14:54:08 +0200 |
commit | bb3a8edb9f21e486f1972c72c4a4090af790e7d7 (patch) | |
tree | 352d0c33649d1cc8347815544f8a06e48a0d44f5 /gtk/gtkscalebutton.c | |
parent | 2e7d5b22a1170304701168bed80d569d9adec935 (diff) | |
download | gtk+-bb3a8edb9f21e486f1972c72c4a4090af790e7d7.tar.gz |
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
Diffstat (limited to 'gtk/gtkscalebutton.c')
-rw-r--r-- | gtk/gtkscalebutton.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c index c979f613f1..24976b0acc 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; |