[eog] EogThumbNav: Fix mousewheel scrolling with gtk-3.3.18 and xserver-1.12



commit 22618a75bcf2a754f5fbe48b2d49c27b5e66ecd5
Author: Felix Riemann <friemann gnome org>
Date:   Sun Mar 18 18:28:57 2012 +0100

    EogThumbNav: Fix mousewheel scrolling with gtk-3.3.18 and xserver-1.12
    
    Handle incoming smooth scroll events that are oviously caused by
    the scrollwheel just like legacy scroll events.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=672312

 src/eog-thumb-nav.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/src/eog-thumb-nav.c b/src/eog-thumb-nav.c
index f29ec32..34645bd 100644
--- a/src/eog-thumb-nav.c
+++ b/src/eog-thumb-nav.c
@@ -30,6 +30,7 @@
 #include <glib/gi18n.h>
 #include <glib-object.h>
 #include <gtk/gtk.h>
+#include <math.h>
 #include <string.h>
 
 #define EOG_THUMB_NAV_GET_PRIVATE(object) \
@@ -83,6 +84,23 @@ eog_thumb_nav_scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer u
 	case GDK_SCROLL_RIGHT:
 		break;
 
+	case GDK_SCROLL_SMOOTH:
+	{
+		/* Compatibility code to catch smooth events from mousewheels */
+		gdouble x_delta, y_delta;
+		gboolean set = gdk_event_get_scroll_deltas ((GdkEvent*)event,
+		                                            &x_delta, &y_delta);
+
+		/* Propagate horizontal smooth scroll events further,
+		   as well as non-mousewheel events. */
+		if (G_UNLIKELY (!set) || x_delta != 0.0 || fabs(y_delta) != 1.0)
+			return FALSE;
+
+		/* The y_delta is either +1.0 or -1.0 here */
+		inc *= (gint) y_delta;
+	}
+	break;
+
 	default:
 		g_assert_not_reached ();
 		return FALSE;
@@ -377,6 +395,7 @@ eog_thumb_nav_init (EogThumbNav *nav)
 			  "scroll-event",
 			  G_CALLBACK (eog_thumb_nav_scroll_event),
 			  nav);
+	gtk_widget_add_events (priv->sw, GDK_SCROLL_MASK);
 
 	priv->adj = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (priv->sw));
 



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