diff options
-rw-r--r-- | src/ephy-notebook.c | 64 | ||||
-rw-r--r-- | src/ephy-notebook.h | 4 | ||||
-rw-r--r-- | src/window-commands.c | 14 |
3 files changed, 73 insertions, 9 deletions
diff --git a/src/ephy-notebook.c b/src/ephy-notebook.c index 22465ad43..5614ca707 100644 --- a/src/ephy-notebook.c +++ b/src/ephy-notebook.c @@ -396,7 +396,6 @@ static void update_tabs_visibility (EphyNotebook *nb, gboolean before_inserting) { - EphyNotebookPrivate *priv = nb->priv; EphyEmbedShellMode mode; gboolean show_tabs; guint num; @@ -777,3 +776,66 @@ ephy_notebook_remove (GtkContainer *container, update_tabs_visibility (notebook, FALSE); } + +/** + * ephy_notebook_next_page: + * @notebook: an #EphyNotebook + * + * Advances to the next page in the @notebook. Note that unlike + * gtk_notebook_next_page() this method will wrap around if + * #GtkSettings:gtk-keynav-wrap-around is set. + **/ +void +ephy_notebook_next_page (EphyNotebook *notebook) +{ + gint current_page, n_pages; + + g_return_if_fail (EPHY_IS_NOTEBOOK (notebook)); + + current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook)); + n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)); + + if (current_page < n_pages - 1) + gtk_notebook_next_page (GTK_NOTEBOOK (notebook)); + else { + gboolean wrap_around; + + g_object_get (gtk_widget_get_settings (GTK_WIDGET (notebook)), + "gtk-keynav-wrap-around", &wrap_around, + NULL); + + if (wrap_around) + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); + } +} + +/** + * ephy_notebook_prev_page: + * @notebook: an #EphyNotebook + * + * Advances to the previous page in the @notebook. Note that unlike + * gtk_notebook_next_page() this method will wrap around if + * #GtkSettings:gtk-keynav-wrap-around is set. + **/ +void +ephy_notebook_prev_page (EphyNotebook *notebook) +{ + gint current_page; + + g_return_if_fail (EPHY_IS_NOTEBOOK (notebook)); + + current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook)); + + if (current_page > 0) + gtk_notebook_prev_page (GTK_NOTEBOOK (notebook)); + else { + gboolean wrap_around; + + g_object_get (gtk_widget_get_settings (GTK_WIDGET (notebook)), + "gtk-keynav-wrap-around", &wrap_around, + NULL); + + if (wrap_around) + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), -1); + } +} diff --git a/src/ephy-notebook.h b/src/ephy-notebook.h index 19e07ed8c..609b0f9a5 100644 --- a/src/ephy-notebook.h +++ b/src/ephy-notebook.h @@ -71,6 +71,10 @@ int ephy_notebook_add_tab (EphyNotebook *nb, void ephy_notebook_set_show_tabs (EphyNotebook *nb, gboolean show_tabs); +void ephy_notebook_next_page (EphyNotebook *notebook); + +void ephy_notebook_prev_page (EphyNotebook *notebook); + G_END_DECLS #endif /* EPHY_NOTEBOOK_H */ diff --git a/src/window-commands.c b/src/window-commands.c index 1443e5d74..e32bd5be0 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -1244,26 +1244,24 @@ void window_cmd_tabs_next (GtkAction *action, EphyWindow *window) { - GtkNotebook *nb; - gboolean handled; + GtkWidget *nb; - nb = GTK_NOTEBOOK (ephy_window_get_notebook (window)); + nb = ephy_window_get_notebook (window); g_return_if_fail (nb != NULL); - g_signal_emit_by_name (nb, "change-current-page", 1, &handled); + ephy_notebook_next_page (EPHY_NOTEBOOK (nb)); } void window_cmd_tabs_previous (GtkAction *action, EphyWindow *window) { - GtkNotebook *nb; - gboolean handled; + GtkWidget *nb; - nb = GTK_NOTEBOOK (ephy_window_get_notebook (window)); + nb = ephy_window_get_notebook (window); g_return_if_fail (nb != NULL); - g_signal_emit_by_name (nb, "change-current-page", -1, &handled); + ephy_notebook_prev_page (EPHY_NOTEBOOK (nb)); } void |