From c455418207877b4f7f84e86bbdfbd4c667ae8221 Mon Sep 17 00:00:00 2001 From: Pablo Barciela Date: Wed, 1 Aug 2018 00:35:55 +0200 Subject: add the ability to switch tabs using [ctrl+tab] and [ctrl+shift+tab] If true the gsettings key "ctrl-tab-switch-tabs" into "org.mate.caja.preferences" Closes https://github.com/mate-desktop/caja/issues/768 --- libcaja-private/org.mate.caja.gschema.xml | 5 ++++ src/caja-navigation-window.c | 46 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/libcaja-private/org.mate.caja.gschema.xml b/libcaja-private/org.mate.caja.gschema.xml index d240ae9a..a0108880 100644 --- a/libcaja-private/org.mate.caja.gschema.xml +++ b/libcaja-private/org.mate.caja.gschema.xml @@ -76,6 +76,11 @@ Where to position newly open tabs in browser windows. If set to "after-current-tab", then new tabs are inserted after the current tab. If set to "end", then new tabs are appended to the end of the tab list. + + false + Switch tabs with [ctrl] + [tab] + If true, it enables the ability to switch tabs using [ctrl + tab] and [ctrl + shift + tab]. + false Caja will exit when last window destroyed. diff --git a/src/caja-navigation-window.c b/src/caja-navigation-window.c index a21e1595..57d5e425 100644 --- a/src/caja-navigation-window.c +++ b/src/caja-navigation-window.c @@ -520,6 +520,52 @@ caja_navigation_window_key_press_event (GtkWidget *widget, window = CAJA_NAVIGATION_WINDOW (widget); + if (event->state & GDK_CONTROL_MASK) + { + GSettings *settings = g_settings_new ("org.mate.caja.preferences"); + gboolean handled = FALSE; + + if (g_settings_get_boolean (settings, "ctrl-tab-switch-tabs")) + { + CajaWindow *cajawin; + CajaWindowSlot *slot; + CajaNavigationWindowPane *pane; + CajaNotebook *cajanotebook; + GtkNotebook *notebook; + int pages; + int page_num; + + cajawin = CAJA_WINDOW (window); + slot = caja_window_get_active_slot (cajawin); + pane = CAJA_NAVIGATION_WINDOW_PANE (slot->pane); + cajanotebook = CAJA_NOTEBOOK (pane->notebook); + notebook = GTK_NOTEBOOK (cajanotebook); + pages = gtk_notebook_get_n_pages (notebook); + page_num = gtk_notebook_get_current_page (notebook); + + if (event->keyval == GDK_KEY_ISO_Left_Tab) + { + if (page_num != 0) + gtk_notebook_prev_page (notebook); + else + gtk_notebook_set_current_page (notebook, (pages - 1)); + handled = TRUE; + } + if (event->keyval == GDK_KEY_Tab) + { + if (page_num != (pages -1)) + gtk_notebook_next_page (notebook); + else + gtk_notebook_set_current_page (notebook, 0); + handled = TRUE; + } + } + g_object_unref (settings); + + if (handled) + return TRUE; + } + for (i = 0; i < G_N_ELEMENTS (extra_navigation_window_keybindings); i++) { if (extra_navigation_window_keybindings[i].keyval == event->keyval) -- cgit v1.2.1