From 0b4c7a6b8c25afb987d08bfd2c4c9be57de23960 Mon Sep 17 00:00:00 2001 From: Laurent Napias Date: Sun, 30 Jun 2019 18:36:43 +0200 Subject: Add scroll tabs with mouse wheel File's properties and caja's preferences windows --- eel/eel-gtk-extensions.c | 60 +++++++++++++++++++++++++++++++++ eel/eel-gtk-extensions.h | 3 ++ src/caja-file-management-properties.c | 7 ++++ src/file-manager/fm-properties-window.c | 8 +++++ 4 files changed, 78 insertions(+) diff --git a/eel/eel-gtk-extensions.c b/eel/eel-gtk-extensions.c index aa9410b7..3a98c7d2 100644 --- a/eel/eel-gtk-extensions.c +++ b/eel/eel-gtk-extensions.c @@ -506,3 +506,63 @@ eel_image_menu_item_new_from_pixbuf (GdkPixbuf *icon_pixbuf, return menuitem; } + +gboolean +eel_dialog_page_scroll_event_callback (GtkWidget *widget, GdkEventScroll *event, GtkWindow *window) +{ + GtkNotebook *notebook = GTK_NOTEBOOK (widget); + GtkWidget *child, *event_widget, *action_widget; + + child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook)); + if (child == NULL) + return FALSE; + + event_widget = gtk_get_event_widget ((GdkEvent *) event); + + /* Ignore scroll events from the content of the page */ + if (event_widget == NULL || + event_widget == child || + gtk_widget_is_ancestor (event_widget, child)) + return FALSE; + + /* And also from the action widgets */ + action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_START); + if (event_widget == action_widget || + (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget))) + return FALSE; + action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_END); + if (event_widget == action_widget || + (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget))) + 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; + case GDK_SCROLL_SMOOTH: + switch (gtk_notebook_get_tab_pos (notebook)) { + case GTK_POS_LEFT: + case GTK_POS_RIGHT: + if (event->delta_y > 0) + gtk_notebook_next_page (notebook); + else if (event->delta_y < 0) + gtk_notebook_prev_page (notebook); + break; + case GTK_POS_TOP: + case GTK_POS_BOTTOM: + if (event->delta_x > 0) + gtk_notebook_next_page (notebook); + else if (event->delta_x < 0) + gtk_notebook_prev_page (notebook); + break; + } + break; + } + + return TRUE; +} diff --git a/eel/eel-gtk-extensions.h b/eel/eel-gtk-extensions.h index 45accfd7..bc02da69 100644 --- a/eel/eel-gtk-extensions.h +++ b/eel/eel-gtk-extensions.h @@ -74,4 +74,7 @@ GtkWidget * eel_image_menu_item_new_from_icon (const gch GtkWidget * eel_image_menu_item_new_from_pixbuf (GdkPixbuf *icon_pixbuf, const gchar *label_name); +gboolean eel_dialog_page_scroll_event_callback (GtkWidget *widget, + GdkEventScroll *event, + GtkWindow *window); #endif /* EEL_GTK_EXTENSIONS_H */ diff --git a/src/caja-file-management-properties.c b/src/caja-file-management-properties.c index ce823a42..3a2154df 100644 --- a/src/caja-file-management-properties.c +++ b/src/caja-file-management-properties.c @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -1272,6 +1273,12 @@ caja_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow *wi gtk_window_set_screen (GTK_WINDOW (dialog), gtk_window_get_screen(window)); } + GtkWidget *notebook = GTK_WIDGET (gtk_builder_get_object (builder, "notebook1")); + gtk_widget_add_events (GTK_WIDGET (notebook), GDK_SCROLL_MASK); + g_signal_connect (GTK_WIDGET (notebook), "scroll-event", + G_CALLBACK (eel_dialog_page_scroll_event_callback), + window); + gtk_widget_show (dialog); } diff --git a/src/file-manager/fm-properties-window.c b/src/file-manager/fm-properties-window.c index 610d9ab5..19954678 100644 --- a/src/file-manager/fm-properties-window.c +++ b/src/file-manager/fm-properties-window.c @@ -5160,6 +5160,14 @@ create_properties_window (StartupData *startup_data) /* Create the notebook tabs. */ window->details->notebook = GTK_NOTEBOOK (gtk_notebook_new ()); + + gtk_notebook_set_scrollable (GTK_NOTEBOOK (window->details->notebook), TRUE); + gtk_widget_add_events (GTK_WIDGET (window->details->notebook), GDK_SCROLL_MASK); + g_signal_connect (window->details->notebook, + "scroll-event", + G_CALLBACK (eel_dialog_page_scroll_event_callback), + window); + gtk_widget_show (GTK_WIDGET (window->details->notebook)); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))), GTK_WIDGET (window->details->notebook), -- cgit v1.2.1