summaryrefslogtreecommitdiff
path: root/gtk/gtkscalebutton.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-08-22 19:15:57 +0200
committerCarlos Garnacho <carlosg@gnome.org>2014-08-26 14:54:08 +0200
commitbb3a8edb9f21e486f1972c72c4a4090af790e7d7 (patch)
tree352d0c33649d1cc8347815544f8a06e48a0d44f5 /gtk/gtkscalebutton.c
parent2e7d5b22a1170304701168bed80d569d9adec935 (diff)
downloadgtk+-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.c10
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;