Author: abrander
Date: 2010-12-04 17:44:32 +0100 (Sat, 04 Dec 2010)
New Revision: 3654

Modified:
   trunk/src/rs-store.c
Log:
[420] Made mousewheel scroll thumbnails anywhere in iconview.

Modified: trunk/src/rs-store.c
===================================================================
--- trunk/src/rs-store.c        2010-12-04 15:29:25 UTC (rev 3653)
+++ trunk/src/rs-store.c        2010-12-04 16:44:32 UTC (rev 3654)
@@ -127,6 +127,7 @@
  #error This must be updated
 #endif
 
+static gboolean scroll_event(GtkWidget *widget, GdkEventScroll *event, 
gpointer user_data);
 static void thumbnail_overlay(GdkPixbuf *pixbuf, GdkPixbuf *lowerleft, 
GdkPixbuf *lowerright, GdkPixbuf *topleft, GdkPixbuf *topright);
 static void thumbnail_update(GdkPixbuf *pixbuf, GdkPixbuf *pixbuf_clean, gint 
priority, gboolean exported);
 static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint 
page_num, gpointer data);
@@ -349,6 +350,33 @@
        store->tooltip_last_path = NULL;
 }
 
+static gboolean
+scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer user_data)
+{
+       gboolean handled = FALSE;
+       GtkAdjustment *adj = 
gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(widget));
+       gdouble value = gtk_adjustment_get_value(adj);
+
+       /* Lifted from _gtk_range_get_wheel_delta() */
+       gdouble delta = pow(gtk_adjustment_get_page_size(adj), 2.0 / 3.0);
+
+       switch (event->direction)
+       {
+               case GDK_SCROLL_UP:
+                       gtk_adjustment_set_value(adj, value - delta);
+                       handled = TRUE;
+                       break;
+               case GDK_SCROLL_DOWN:
+                       gtk_adjustment_set_value(adj, value + delta);
+                       handled = TRUE;
+                       break;
+               default:
+                       break;
+       }
+
+       return handled;
+}
+
 static void
 switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, 
gpointer data)
 {
@@ -608,6 +636,10 @@
        scroller = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroller),
                GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
+
+       /* Handle scroll events not handled by scroller to allow scrolling in 
horizontal iconview */
+       g_signal_connect_after(scroller, "scroll-event", 
G_CALLBACK(scroll_event), NULL);
+
        gtk_container_add (GTK_CONTAINER (scroller), iconview);
 
        return(scroller);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to