From a3f5ac0e9cd58b5760e2a4234f6509f979e5e540 Mon Sep 17 00:00:00 2001 From: Stephen Krauth Date: Sat, 27 Apr 2013 16:09:59 -0400 Subject: Add previous/next profile keyboard shortcuts, menu items --- src/terminal-window.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) (limited to 'src/terminal-window.c') diff --git a/src/terminal-window.c b/src/terminal-window.c index b33e33c..0d04f11 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -98,7 +98,7 @@ struct _TerminalWindowPrivate #define SET_ENCODING_UI_PATH "/menubar/Terminal/TerminalSetEncoding/EncodingsPH" #define SET_ENCODING_ACTION_NAME_PREFIX "TerminalSetEncoding" -#define PROFILES_UI_PATH "/menubar/Terminal/TerminalProfiles" +#define PROFILES_UI_PATH "/menubar/Terminal/TerminalProfiles/ProfilesPH" #define PROFILES_POPUP_UI_PATH "/Popup/PopupTerminalProfiles/ProfilesPH" #define SIZE_TO_UI_PATH "/menubar/Terminal/TerminalSizeToPH" @@ -197,6 +197,8 @@ static void search_find_prev_callback (GtkAction *action, TerminalWindow *window); static void search_clear_highlight_callback (GtkAction *action, TerminalWindow *window); +static void terminal_next_or_previous_profile_cb (GtkAction *action, + TerminalWindow *window); static void terminal_set_title_callback (GtkAction *action, TerminalWindow *window); static void terminal_add_encoding_callback (GtkAction *action, @@ -1924,6 +1926,16 @@ terminal_window_init (TerminalWindow *window) /* Terminal menu */ { "TerminalProfiles", NULL, N_("Change _Profile") }, + { + "ProfilePrevious", NULL, N_("_Previous Profile"), "Page_Up", + NULL, + G_CALLBACK (terminal_next_or_previous_profile_cb) + }, + { + "ProfileNext", NULL, N_("_Next Profile"), "Page_Down", + NULL, + G_CALLBACK (terminal_next_or_previous_profile_cb) + }, { "TerminalSetTitle", NULL, N_("_Set Titleā€¦"), NULL, NULL, @@ -3778,6 +3790,61 @@ search_clear_highlight_callback (GtkAction *action, vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL); } +static void +terminal_next_or_previous_profile_cb (GtkAction *action, + TerminalWindow *window) +{ + TerminalWindowPrivate *priv = window->priv; + TerminalProfile *active_profile, *new_profile; + GList *profiles, *p; + + const char *name; + guint backwards = 0; + + name = gtk_action_get_name (action); + if (strcmp (name, "ProfilePrevious") == 0) + { + backwards = 1; + } + + profiles = terminal_app_get_profile_list (terminal_app_get ()); + if (profiles == NULL) + return; + + if (priv->active_screen) + active_profile = terminal_screen_get_profile (priv->active_screen); + else + return; + + for (p = profiles; p != NULL; p = p->next) + { + TerminalProfile *profile = (TerminalProfile *) p->data; + if (profile == active_profile) + { + if (backwards) { + p = p->prev; + if (p == NULL) + p = g_list_last (profiles); + new_profile = p->data; + break; + } + else + { + p = p->next; + if (p == NULL) + p = g_list_first (profiles); + new_profile = p->data; + break; + } + } + } + + if (new_profile) + terminal_screen_set_profile (priv->active_screen, new_profile); + + g_list_free (profiles); +} + static void terminal_set_title_dialog_response_cb (GtkWidget *dialog, int response, -- cgit v1.2.1