summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid King <amigadave@amigadave.com>2012-03-18 10:57:08 +0000
committerDavid King <amigadave@amigadave.com>2012-03-19 21:07:26 +0000
commite84891c903653bc3d3a9b9af9cd7c6b93275f3f1 (patch)
tree3e8a23fd4972667a182f24c66ff5a66f7f60e09d
parent3899cddfadf14cb0759219e1af8cff8ff8354210 (diff)
downloadcheese-e84891c903653bc3d3a9b9af9cd7c6b93275f3f1.tar.gz
Handle smooth scroll wheel events in EogThumbNav
Fixes bug 672311.
-rw-r--r--src/thumbview/eog-thumb-nav.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/thumbview/eog-thumb-nav.c b/src/thumbview/eog-thumb-nav.c
index 6eb65f8f..42367576 100644
--- a/src/thumbview/eog-thumb-nav.c
+++ b/src/thumbview/eog-thumb-nav.c
@@ -31,6 +31,7 @@
#include <glib-object.h>
#include <gtk/gtk.h>
#include <string.h>
+#include <math.h>
#define EOG_THUMB_NAV_GET_PRIVATE(object) \
(G_TYPE_INSTANCE_GET_PRIVATE ((object), EOG_TYPE_THUMB_NAV, EogThumbNavPrivate))
@@ -73,12 +74,25 @@ eog_thumb_nav_scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer u
{
EogThumbNav *nav = EOG_THUMB_NAV (user_data);
gint inc = EOG_THUMB_NAV_SCROLL_INC * 3;
- gdouble value, upper, page_size;
+ gdouble value, upper, page_size, delta_x, delta_y;
+ gboolean smooth;
nav->priv->adj = nav->priv->vertical ? nav->priv->vadj : nav->priv->hadj;
switch (event->direction)
{
+#if GTK_CHECK_VERSION (3, 3, 18)
+ /* Handle smooth scroll events from mouse wheels, bug 672311. */
+ case GDK_SCROLL_SMOOTH:
+ smooth = gdk_event_get_scroll_deltas ((const GdkEvent *) event,
+ &delta_x, &delta_y);
+ /* Pass through non-mouse wheel events. */
+ if (G_UNLIKELY (!smooth) || delta_x != 0.0 || fabs (delta_y) != 1.0)
+ return FALSE;
+
+ inc *= (gint) delta_y;
+ break;
+#endif
case GDK_SCROLL_UP:
case GDK_SCROLL_LEFT:
inc *= -1;