diff options
author | David King <amigadave@amigadave.com> | 2012-03-18 10:57:08 +0000 |
---|---|---|
committer | David King <amigadave@amigadave.com> | 2012-03-19 21:07:26 +0000 |
commit | e84891c903653bc3d3a9b9af9cd7c6b93275f3f1 (patch) | |
tree | 3e8a23fd4972667a182f24c66ff5a66f7f60e09d | |
parent | 3899cddfadf14cb0759219e1af8cff8ff8354210 (diff) | |
download | cheese-e84891c903653bc3d3a9b9af9cd7c6b93275f3f1.tar.gz |
Handle smooth scroll wheel events in EogThumbNav
Fixes bug 672311.
-rw-r--r-- | src/thumbview/eog-thumb-nav.c | 16 |
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; |