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);
+}