diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c index 05b9574623c3426f60325d9d372a8c3dd7cf13af..22a2a141ef1c82a469d047190a37d17468fb2500 100644 --- a/app/display/gimpimagewindow.c +++ b/app/display/gimpimagewindow.c @@ -248,6 +248,9 @@ static void gimp_image_window_page_reordered (GtkNotebook *not GtkWidget *widget, gint page_num, GimpImageWindow *window); +static gboolean gimp_image_window_page_scrolled (GtkWidget *widget, + GdkEventScroll *event, + GimpImageWindow *window); static void gimp_image_window_disconnect_from_active_shell (GimpImageWindow *window); @@ -530,6 +533,11 @@ gimp_image_window_constructed (GObject *object) g_signal_connect (private->notebook, "page-reordered", G_CALLBACK (gimp_image_window_page_reordered), window); + gtk_widget_add_events (GTK_WIDGET (private->notebook), + GDK_SCROLL_MASK); + g_signal_connect (private->notebook, "scroll-event", + G_CALLBACK (gimp_image_window_page_scrolled), + window); gtk_widget_show (private->notebook); /* Create the right dock columns widget */ @@ -2190,6 +2198,45 @@ gimp_image_window_page_reordered (GtkNotebook *notebook, gtk_notebook_reorder_child (notebook, widget, page_num); } +/* Restore GTK2 behavior of mouse-scrolling to switch between + * notebook tabs. References Geany's notebook_tab_bar_click_cb () + * at https://github.com/geany/geany/blob/master/src/notebook.c + */ +static gboolean +gimp_image_window_page_scrolled (GtkWidget *widget, + GdkEventScroll *event, + GimpImageWindow *window) +{ + GtkNotebook *notebook = NULL; + GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window); + GtkWidget *page = NULL; + + notebook = GTK_NOTEBOOK (private->notebook); + + page = gtk_notebook_get_nth_page (notebook, + gtk_notebook_get_current_page (notebook)); + if (! page) + return FALSE; + + switch (event->direction) + { + case GDK_SCROLL_RIGHT: + case GDK_SCROLL_DOWN: + gtk_notebook_next_page (notebook); + break; + + case GDK_SCROLL_LEFT: + case GDK_SCROLL_UP: + gtk_notebook_prev_page (notebook); + break; + + default: + break; + } + + return TRUE; +} + static void gimp_image_window_disconnect_from_active_shell (GimpImageWindow *window) { @@ -2470,6 +2517,11 @@ gimp_image_window_create_tab_label (GimpImageWindow *window, G_CALLBACK (gimp_image_window_shell_close_button_callback), shell); + /* Enable mouse wheel scolling on image tabs */ + gtk_widget_add_events (GTK_WIDGET (hbox), GDK_SCROLL_MASK); + gtk_widget_add_events (GTK_WIDGET (view), GDK_SCROLL_MASK); + gtk_widget_add_events (GTK_WIDGET (button), GDK_SCROLL_MASK); + g_object_set_data (G_OBJECT (hbox), "close-button", button); return hbox;