diff options
| author | tamplan <[email protected]> | 2020-05-18 17:37:08 +0200 | 
|---|---|---|
| committer | raveit65 <[email protected]> | 2020-07-13 10:33:43 +0200 | 
| commit | c331ec988f543ddfd5e0636d15f7aeafeefa1b0f (patch) | |
| tree | 55519a1021d2d1cbf5180bb2c680937b640c25f6 | |
| parent | 4b2acec0f78ca3402185e29aff0873c21f4b735e (diff) | |
| download | eom-c331ec988f543ddfd5e0636d15f7aeafeefa1b0f.tar.bz2 eom-c331ec988f543ddfd5e0636d15f7aeafeefa1b0f.tar.xz  | |
Add tab scrolling support for dialog windows
| -rw-r--r-- | src/eom-preferences-dialog.c | 11 | ||||
| -rw-r--r-- | src/eom-properties-dialog.c | 7 | ||||
| -rw-r--r-- | src/eom-util.c | 61 | ||||
| -rw-r--r-- | src/eom-util.h | 3 | 
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__ */  | 
