diff --cc terminal/terminal-screen.c index 4442bca,37e50a6..0000000 --- a/terminal/terminal-screen.c +++ b/terminal/terminal-screen.c @@@ -2294,12 -2315,28 +2294,38 @@@ terminal_screen_search_find_previous (T vte_terminal_search_find_previous (VTE_TERMINAL (screen->terminal)); } + + +void +terminal_screen_set_input_enabled (TerminalScreen *screen, + gboolean enabled) +{ + terminal_return_if_fail (TERMINAL_IS_SCREEN (screen)); + vte_terminal_set_input_enabled (VTE_TERMINAL (screen->terminal), enabled); +} ++ + void + terminal_screen_set_tab_color (TerminalScreen *screen) + { + char *markup; + GtkLabel *label = GTK_LABEL (screen->tab_label); + const char *format = "\%s"; + GHashTable *color_list; + GHashTableIter iter; + gpointer key, value; + + g_object_get (G_OBJECT (screen->preferences), "tab-colors-list", &color_list, NULL); + if (!color_list) + return; + + g_hash_table_iter_init (&iter, color_list); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + if (strstr (gtk_label_get_text(label), key) != NULL) { + markup = g_markup_printf_escaped (format, value, gtk_label_get_text (label)); + gtk_label_set_markup (label, markup); + g_free (markup); + break; + } + } + } diff --git a/terminal/terminal-window.c b/terminal/terminal-window.c index 213f5ba..08cce4d 100644 --- a/terminal/terminal-window.c +++ b/terminal/terminal-window.c @@ -212,8 +212,10 @@ static void terminal_window_switch_tab (GtkNotebook static void terminal_window_move_tab (GtkNotebook *notebook, gboolean move_left); static void terminal_window_tab_info_free (TerminalWindowTabInfo *tab_info); - - +static void terminal_window_action_set_tab_color (GtkAction *action, + TerminalWindow *window); +static void terminal_window_action_set_tab_color_response (GtkWidget *button, + TerminalWindow *window); static guint window_signals[LAST_SIGNAL]; static gchar *window_notebook_group = PACKAGE_NAME; @@ -243,6 +245,7 @@ static const GtkActionEntry action_entries[] = { "zoom-reset", "zoom-original", N_ ("_Normal Size"), "0", N_ ("Zoom to default size"), G_CALLBACK (terminal_window_action_zoom_reset), }, { "terminal-menu", NULL, N_ ("_Terminal"), NULL, NULL, NULL, }, { "set-title", NULL, N_ ("_Set Title..."), "s", NULL, G_CALLBACK (terminal_window_action_set_title), }, + { "set-tab-color", NULL, N_ ("Set Tab _Color..."), "c", NULL, G_CALLBACK (terminal_window_action_set_tab_color), }, { "search", "edit-find", N_ ("_Find..."), "f", N_ ("Search terminal contents"), G_CALLBACK (terminal_window_action_search), }, { "search-next", NULL, N_ ("Find Ne_xt"), NULL, NULL, G_CALLBACK (terminal_window_action_search_next), }, { "search-prev", NULL, N_ ("Find Pre_vious"), NULL, NULL, G_CALLBACK (terminal_window_action_search_prev), }, @@ -1017,7 +1020,6 @@ terminal_window_notebook_button_press_event (GtkNotebook *notebook, terminal_return_val_if_fail (TERMINAL_IS_WINDOW (window), FALSE); terminal_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE); - gdk_window_get_position (event->window, &x, &y); x += event->x; y += event->y; @@ -1315,6 +1317,7 @@ terminal_window_notify_title (TerminalScreen *screen, if (screen == window->active) { title = terminal_screen_get_title (window->active); + terminal_screen_set_tab_color (screen); gtk_window_set_title (GTK_WINDOW (window), title); g_free (title); } @@ -1853,7 +1856,6 @@ terminal_window_action_set_title (GtkAction *action, } - static void terminal_window_action_search_response (GtkWidget *dialog, gint response_id, @@ -2295,3 +2297,100 @@ terminal_window_get_restart_command (TerminalWindow *window) return g_slist_reverse (result); } + +static void +terminal_window_action_set_tab_color (GtkAction *action, + TerminalWindow *window) +{ + GtkWidget *tab; + GtkWidget *popover; + GtkWidget *box; + GtkWidget *label; + GtkWidget *entry; + GtkWidget *color_button; + GdkRGBA color = {255, .0, .0, 1}; + GtkWidget *button; + GtkWidget *save; + + terminal_return_if_fail (window->active != NULL); + + tab = gtk_notebook_get_tab_label (GTK_NOTEBOOK(window->notebook), GTK_WIDGET(window->active)); + popover = gtk_popover_new (tab); + gtk_popover_set_position (GTK_POPOVER (popover), GTK_POS_BOTTOM); + + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 22); + label = gtk_label_new_with_mnemonic (_("_Substring")); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0); + + entry = gtk_entry_new (); + gtk_entry_set_text (GTK_ENTRY(entry), terminal_screen_get_title (window->active)); + gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0); + gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); + /*TODO: submit on enter */ + + color_button = gtk_color_button_new (); + gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_button), &color); + gtk_box_pack_start (GTK_BOX (box), color_button, TRUE, TRUE, 0); + + save = gtk_check_button_new_with_label (_("Save")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(save), TRUE); + gtk_box_pack_start (GTK_BOX (box), save, TRUE, TRUE, 0); + + button = gtk_button_new_with_label (_("Apply")); + gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 0); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (terminal_window_action_set_tab_color_response), window); + g_object_set_data (G_OBJECT (button), "pattern", entry); + g_object_set_data (G_OBJECT (button), "color", color_button); + g_object_set_data (G_OBJECT (button), "permanent", save); + g_object_set_data (G_OBJECT (button), "popover", popover); + + gtk_widget_show_all (box); + gtk_container_add (GTK_CONTAINER (popover), box); + gtk_container_set_border_width (GTK_CONTAINER (popover), 6); + gtk_widget_set_visible (popover, TRUE); +} + +static void +terminal_window_action_set_tab_color_response (GtkWidget *button, + TerminalWindow *window) +{ + GtkWidget *patternWidget; + GtkWidget *colorWidget; + GtkWidget *permanentWidget; + GtkWidget *popover; + GdkRGBA color; + GHashTable *color_list; + gchar *color_str; + gchar *pattern; + + g_object_get (G_OBJECT (window->preferences), "tab-colors-list", &color_list, NULL); + if (!color_list) + color_list = g_hash_table_new (g_str_hash, g_str_equal); + + patternWidget = g_object_get_data (G_OBJECT (button), "pattern"); + colorWidget = g_object_get_data (G_OBJECT (button), "color"); + permanentWidget = g_object_get_data (G_OBJECT (button), "permanent"); + popover = g_object_get_data (G_OBJECT (button), "popover"); + + pattern = g_strdup (gtk_entry_get_text (GTK_ENTRY(patternWidget))); + gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(colorWidget), &color); + + color_str = g_strdup_printf ("#%02x%02x%02x", + (guint) (color.red * 255), + (guint) (color.green * 255), + (guint) (color.blue * 255)); + +/* TODO + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(permanentWidget))) + g_warning ("need to save %s for pattern %s", color_str, pattern); +*/ + g_hash_table_insert (color_list, pattern, color_str); + g_object_set (G_OBJECT (window->preferences), "tab-colors-list", color_list, NULL); + + terminal_screen_set_tab_color (window->active); + + gtk_widget_hide (popover); + gtk_widget_destroy (popover); +}