summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Napias <[email protected]>2019-06-30 18:36:43 +0200
committerZenWalker <[email protected]>2019-07-02 05:14:42 +0200
commit0b4c7a6b8c25afb987d08bfd2c4c9be57de23960 (patch)
tree0e9406d23cfd19d40231a2c38e1ced1bd5463ec2
parent90fda6cb5d5e471c353f75f952d3fb76c762c791 (diff)
downloadcaja-0b4c7a6b8c25afb987d08bfd2c4c9be57de23960.tar.bz2
caja-0b4c7a6b8c25afb987d08bfd2c4c9be57de23960.tar.xz
Add scroll tabs with mouse wheel
File's properties and caja's preferences windows
-rw-r--r--eel/eel-gtk-extensions.c60
-rw-r--r--eel/eel-gtk-extensions.h3
-rw-r--r--src/caja-file-management-properties.c7
-rw-r--r--src/file-manager/fm-properties-window.c8
4 files changed, 78 insertions, 0 deletions
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 <glib/gi18n.h>
#include <eel/eel-glib-extensions.h>
+#include <eel/eel-gtk-extensions.h>
#include <libcaja-private/caja-column-chooser.h>
#include <libcaja-private/caja-column-utilities.h>
@@ -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),