add the abbility to switch tabs using [ctrl+tab] and [ctrl+shift+tab]

If true the gsettings key "ctrl-tab-switch-tabs" into "org.mate.terminal.global"

Closes https://github.com/mate-desktop/mate-terminal/issues/98
master-1.22
Pablo Barciela 2017-11-10 00:40:58 +01:00 committed by raveit65
parent ca53774e9f
commit 7ebc9d18b3
2 changed files with 49 additions and 0 deletions

View File

@ -74,6 +74,11 @@
<summary>Whether to ask for confirmation when closing terminal windows</summary> <summary>Whether to ask for confirmation when closing terminal windows</summary>
<description>Whether to ask for confirmation when closing a terminal window which has more than one open tab.</description> <description>Whether to ask for confirmation when closing a terminal window which has more than one open tab.</description>
</key> </key>
<key name="ctrl-tab-switch-tabs" type="b">
<default>false</default>
<summary>Switch tabs with [ctrl] + [tab]</summary>
<description>If true, it enables the abbility to switch tabs using [ctrl + tab] and [ctrl + shift + tab].</description>
</key>
</schema> </schema>
<schema id="org.mate.terminal.profiles" path="/org/mate/terminal/profiles/"> <schema id="org.mate.terminal.profiles" path="/org/mate/terminal/profiles/">
</schema> </schema>

View File

@ -160,6 +160,9 @@ static gboolean terminal_window_focus_in_event (GtkWidget *widget,
static gboolean notebook_button_press_cb (GtkWidget *notebook, static gboolean notebook_button_press_cb (GtkWidget *notebook,
GdkEventButton *event, GdkEventButton *event,
TerminalWindow *window); TerminalWindow *window);
static gboolean window_key_press_cb (GtkWidget *notebook,
GdkEventKey *event,
TerminalWindow *window);
static gboolean notebook_popup_menu_cb (GtkWidget *notebook, static gboolean notebook_popup_menu_cb (GtkWidget *notebook,
TerminalWindow *window); TerminalWindow *window);
static void notebook_page_selected_callback (GtkWidget *notebook, static void notebook_page_selected_callback (GtkWidget *notebook,
@ -2220,6 +2223,8 @@ terminal_window_init (TerminalWindow *window)
gtk_notebook_set_group_name (GTK_NOTEBOOK (priv->notebook), I_("mate-terminal-window")); gtk_notebook_set_group_name (GTK_NOTEBOOK (priv->notebook), I_("mate-terminal-window"));
g_signal_connect (priv->notebook, "button-press-event", g_signal_connect (priv->notebook, "button-press-event",
G_CALLBACK (notebook_button_press_cb), window); G_CALLBACK (notebook_button_press_cb), window);
g_signal_connect (window, "key-press-event",
G_CALLBACK (window_key_press_cb), window);
g_signal_connect (priv->notebook, "popup-menu", g_signal_connect (priv->notebook, "popup-menu",
G_CALLBACK (notebook_popup_menu_cb), window); G_CALLBACK (notebook_popup_menu_cb), window);
g_signal_connect_after (priv->notebook, "switch-page", g_signal_connect_after (priv->notebook, "switch-page",
@ -2997,6 +3002,45 @@ notebook_button_press_cb (GtkWidget *widget,
return TRUE; return TRUE;
} }
static gboolean
window_key_press_cb (GtkWidget *widget,
GdkEventKey *event,
TerminalWindow *window)
{
GSettings *settings;
settings = g_settings_new ("org.mate.terminal.global");
if (g_settings_get_boolean (settings, "ctrl-tab-switch-tabs") &&
event->state & GDK_CONTROL_MASK)
{
TerminalWindowPrivate *priv = window->priv;
GtkNotebook *notebook = GTK_NOTEBOOK (priv->notebook);
int pages = gtk_notebook_get_n_pages (notebook);
int 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));
return 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);
return TRUE;
}
}
return FALSE;
}
static gboolean static gboolean
notebook_popup_menu_cb (GtkWidget *widget, notebook_popup_menu_cb (GtkWidget *widget,
TerminalWindow *window) TerminalWindow *window)