summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortamplan <[email protected]>2020-05-18 17:37:08 +0200
committerraveit65 <[email protected]>2020-07-13 10:33:43 +0200
commitc331ec988f543ddfd5e0636d15f7aeafeefa1b0f (patch)
tree55519a1021d2d1cbf5180bb2c680937b640c25f6 /src
parent4b2acec0f78ca3402185e29aff0873c21f4b735e (diff)
downloadeom-c331ec988f543ddfd5e0636d15f7aeafeefa1b0f.tar.bz2
eom-c331ec988f543ddfd5e0636d15f7aeafeefa1b0f.tar.xz
Add tab scrolling support for dialog windows
Diffstat (limited to 'src')
-rw-r--r--src/eom-preferences-dialog.c11
-rw-r--r--src/eom-properties-dialog.c7
-rw-r--r--src/eom-util.c61
-rw-r--r--src/eom-util.h3
4 files changed, 82 insertions, 0 deletions
diff --git a/src/eom-preferences-dialog.c b/src/eom-preferences-dialog.c
index e13d0a4..7b613b4 100644
--- a/src/eom-preferences-dialog.c
+++ b/src/eom-preferences-dialog.c
@@ -46,6 +46,7 @@ struct _EomPreferencesDialogPrivate {
GSettings *ui_settings;
GSettings *fullscreen_settings;
+ GtkWidget *notebook;
GtkWidget *interpolate_check;
GtkWidget *extrapolate_check;
GtkWidget *autorotate_check;
@@ -153,6 +154,9 @@ eom_preferences_dialog_class_init (EomPreferencesDialogClass *klass)
"/org/mate/eom/ui/eom-preferences-dialog.ui");
gtk_widget_class_bind_template_child_private (widget_class,
EomPreferencesDialog,
+ notebook);
+ gtk_widget_class_bind_template_child_private (widget_class,
+ EomPreferencesDialog,
interpolate_check);
gtk_widget_class_bind_template_child_private (widget_class,
EomPreferencesDialog,
@@ -318,6 +322,13 @@ eom_preferences_dialog_init (EomPreferencesDialog *pref_dlg)
G_SETTINGS_BIND_DEFAULT);
gtk_widget_show_all (priv->plugin_manager);
+
+ /* Add tab scrolling support for GTK3 */
+ gtk_widget_add_events (priv->notebook, GDK_SCROLL_MASK);
+ g_signal_connect (priv->notebook,
+ "scroll-event",
+ G_CALLBACK (eom_notebook_page_scroll_event_cb),
+ NULL);
}
GtkWidget *eom_preferences_dialog_get_instance (GtkWindow *parent)
diff --git a/src/eom-properties-dialog.c b/src/eom-properties-dialog.c
index 991b608..3295b2e 100644
--- a/src/eom-properties-dialog.c
+++ b/src/eom-properties-dialog.c
@@ -789,6 +789,13 @@ eom_properties_dialog_init (EomPropertiesDialog *prop_dlg)
gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook),
EOM_PROPERTIES_DIALOG_PAGE_EXIF);
#endif
+
+ /* Add tab scrolling support for GTK3 */
+ gtk_widget_add_events (priv->notebook, GDK_SCROLL_MASK);
+ g_signal_connect (priv->notebook,
+ "scroll-event",
+ G_CALLBACK (eom_notebook_page_scroll_event_cb),
+ NULL);
}
/**
diff --git a/src/eom-util.c b/src/eom-util.c
index 1dc42fa..69692d5 100644
--- a/src/eom-util.c
+++ b/src/eom-util.c
@@ -427,3 +427,64 @@ eom_util_show_file_in_filemanager (GFile *file, GtkWindow *toplevel)
if (!done)
_eom_util_show_file_in_filemanager_fallback (file, toplevel);
}
+
+gboolean
+eom_notebook_page_scroll_event_cb (GtkWidget *widget,
+ GdkEventScroll *event)
+
+{
+ 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/src/eom-util.h b/src/eom-util.h
index 528ec4e..b713721 100644
--- a/src/eom-util.h
+++ b/src/eom-util.h
@@ -65,6 +65,9 @@ G_GNUC_INTERNAL
void eom_util_show_file_in_filemanager (GFile *file,
GtkWindow *toplevel);
+gboolean eom_notebook_page_scroll_event_cb (GtkWidget *notebook,
+ GdkEventScroll *event);
+
G_END_DECLS
#endif /* __EOM_UTIL_H__ */