[Xfce4-commits] [apps/xfce4-terminal] 01/01: Add action to set tab label color

noreply at xfce.org noreply at xfce.org
Sun May 27 16:15:12 CEST 2018


This is an automated email from the git hooks/post-receive script.

f   2   4   0   4       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-terminal.

commit d2d4b4e95977022df408647266226082843a9d86
Author: Igor <f2404 at yandex.ru>
Date:   Sun May 27 10:15:00 2018 -0400

    Add action to set tab label color
---
 terminal/terminal-screen.c      |  81 +++++++++++++++++-------
 terminal/terminal-screen.h      | 135 ++++++++++++++++++++--------------------
 terminal/terminal-window-ui.xml |   4 ++
 terminal/terminal-window.c      |  25 ++++++++
 4 files changed, 155 insertions(+), 90 deletions(-)

diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c
index 8b93d22..6b1d8bc 100644
--- a/terminal/terminal-screen.c
+++ b/terminal/terminal-screen.c
@@ -157,6 +157,8 @@ static void       terminal_screen_urgent_bell                   (TerminalWidget
                                                                  TerminalScreen        *screen);
 static void       terminal_screen_set_custom_command            (TerminalScreen        *screen,
                                                                  gchar                **command);
+static void       terminal_screen_set_tab_label_color           (TerminalScreen        *screen,
+                                                                 const GdkRGBA         *color);
 
 
 
@@ -188,6 +190,7 @@ struct _TerminalScreen
 
   gchar               *custom_fg_color;
   gchar               *custom_bg_color;
+  gchar               *custom_tab_label_color;
 
   TerminalTitle        dynamic_title_mode;
   guint                hold : 1;
@@ -376,6 +379,7 @@ terminal_screen_finalize (GObject *object)
   g_free (screen->initial_title);
   g_free (screen->custom_fg_color);
   g_free (screen->custom_bg_color);
+  g_free (screen->custom_tab_label_color);
 
   (*G_OBJECT_CLASS (terminal_screen_parent_class)->finalize) (object);
 }
@@ -1478,14 +1482,16 @@ terminal_screen_reset_activity_timeout (gpointer user_data)
   TerminalScreen *screen = TERMINAL_SCREEN (user_data);
   GdkRGBA         active_color;
   GdkRGBA         fg_color;
-  PangoAttrList  *attrs;
-  PangoAttribute *foreground;
+  GdkRGBA         label_color;
 
   if (G_UNLIKELY (screen->tab_label == NULL))
     return FALSE;
 
   /* unset */
-  gtk_label_set_attributes (GTK_LABEL (screen->tab_label), NULL);
+  if (G_LIKELY (screen->custom_tab_label_color == NULL))
+    gtk_label_set_attributes (GTK_LABEL (screen->tab_label), NULL);
+  else if (gdk_rgba_parse (&label_color, screen->custom_tab_label_color))
+    terminal_screen_set_tab_label_color (screen, &label_color);
 
   if (terminal_preferences_get_color (screen->preferences, "tab-activity-color", &active_color))
     {
@@ -1497,13 +1503,7 @@ terminal_screen_reset_activity_timeout (gpointer user_data)
       active_color.green = (active_color.green + fg_color.green) / 2;
       active_color.blue = (active_color.blue + fg_color.blue) / 2;
 
-      attrs = pango_attr_list_new ();
-      foreground = pango_attr_foreground_new ((guint16)(active_color.red*65535),
-                                              (guint16)(active_color.green*65535),
-                                              (guint16)(active_color.blue*65535));
-      pango_attr_list_insert (attrs, foreground);
-      gtk_label_set_attributes (GTK_LABEL (screen->tab_label), attrs);
-      pango_attr_list_unref (attrs);
+      terminal_screen_set_tab_label_color (screen, &active_color);
     }
 
   return FALSE;
@@ -1524,9 +1524,8 @@ terminal_screen_vte_window_contents_changed (TerminalScreen *screen)
 {
   guint           timeout;
   GdkRGBA         color;
+  GdkRGBA         label_color;
   gboolean        has_color;
-  PangoAttrList  *attrs;
-  PangoAttribute *foreground;
 
   terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
   terminal_return_if_fail (GTK_IS_LABEL (screen->tab_label));
@@ -1547,17 +1546,11 @@ terminal_screen_vte_window_contents_changed (TerminalScreen *screen)
   /* set label color */
   has_color = terminal_preferences_get_color (screen->preferences, "tab-activity-color", &color);
   if (G_LIKELY (has_color))
-    {
-      attrs = pango_attr_list_new ();
-      foreground = pango_attr_foreground_new ((guint16)(color.red*65535),
-                                              (guint16)(color.green*65535),
-                                              (guint16)(color.blue*65535));
-      pango_attr_list_insert (attrs, foreground);
-      gtk_label_set_attributes (GTK_LABEL (screen->tab_label), attrs);
-      pango_attr_list_unref (attrs);
-    }
-  else
-      gtk_label_set_attributes (GTK_LABEL (screen->tab_label), NULL);
+    terminal_screen_set_tab_label_color (screen, &color);
+  else if (G_LIKELY (screen->custom_tab_label_color == NULL))
+    gtk_label_set_attributes (GTK_LABEL (screen->tab_label), NULL);
+  else if (gdk_rgba_parse (&label_color, screen->custom_tab_label_color))
+    terminal_screen_set_tab_label_color (screen, &label_color);
 
   /* stop running reset timeout */
   if (screen->activity_timeout_id != 0)
@@ -1718,6 +1711,21 @@ terminal_screen_set_custom_command (TerminalScreen *screen,
 
 
 
+static void
+terminal_screen_set_tab_label_color (TerminalScreen *screen,
+                                     const GdkRGBA  *color)
+{
+  PangoAttrList *attrs = pango_attr_list_new ();
+  PangoAttribute *foreground = pango_attr_foreground_new ((guint16)(color->red*65535),
+                                                          (guint16)(color->green*65535),
+                                                          (guint16)(color->blue*65535));
+  pango_attr_list_insert (attrs, foreground);
+  gtk_label_set_attributes (GTK_LABEL (screen->tab_label), attrs);
+  pango_attr_list_unref (attrs);
+}
+
+
+
 #if VTE_CHECK_VERSION (0, 48, 0)
 static void
 terminal_screen_spawn_async_cb (VteTerminal *terminal,
@@ -2432,13 +2440,20 @@ terminal_screen_get_restart_command (TerminalScreen *screen)
 void
 terminal_screen_reset_activity (TerminalScreen *screen)
 {
+  GdkRGBA label_color;
+
   terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
 
   if (screen->activity_timeout_id != 0)
     g_source_remove (screen->activity_timeout_id);
 
   if (screen->tab_label != NULL)
-    gtk_label_set_attributes (GTK_LABEL (screen->tab_label), NULL);
+    {
+      if (G_LIKELY (screen->custom_tab_label_color == NULL))
+        gtk_label_set_attributes (GTK_LABEL (screen->tab_label), NULL);
+      else if (gdk_rgba_parse (&label_color, screen->custom_tab_label_color))
+        terminal_screen_set_tab_label_color (screen, &label_color);
+    }
 }
 
 
@@ -2821,3 +2836,21 @@ terminal_screen_get_custom_bg_color (TerminalScreen *screen)
   terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
   return screen->custom_bg_color;
 }
+
+
+
+void
+terminal_screen_set_custom_tab_label_color (TerminalScreen *screen,
+                                            const gchar    *color)
+{
+  GdkRGBA label_color;
+
+  terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
+
+  if (gdk_rgba_parse (&label_color, color))
+    {
+      g_free (screen->custom_tab_label_color);
+      screen->custom_tab_label_color = g_strdup (color);
+      terminal_screen_set_tab_label_color (screen, &label_color);
+    }
+}
diff --git a/terminal/terminal-screen.h b/terminal/terminal-screen.h
index f256dec..e0c5e5c 100644
--- a/terminal/terminal-screen.h
+++ b/terminal/terminal-screen.h
@@ -36,103 +36,106 @@ G_BEGIN_DECLS
 typedef struct _TerminalScreenClass TerminalScreenClass;
 typedef struct _TerminalScreen      TerminalScreen;
 
-GType           terminal_screen_get_type                  (void) G_GNUC_CONST;
+GType           terminal_screen_get_type                   (void) G_GNUC_CONST;
 
-TerminalScreen *terminal_screen_new                       (TerminalTabAttr *attr,
-                                                           glong            columns,
-                                                           glong            rows);
+TerminalScreen *terminal_screen_new                        (TerminalTabAttr *attr,
+                                                            glong            columns,
+                                                            glong            rows);
 
-void            terminal_screen_launch_child              (TerminalScreen *screen);
+void            terminal_screen_launch_child               (TerminalScreen *screen);
 
-const gchar    *terminal_screen_get_custom_title          (TerminalScreen *screen);
-void            terminal_screen_set_custom_title          (TerminalScreen *screen,
-                                                           const gchar    *title);
+const gchar    *terminal_screen_get_custom_title           (TerminalScreen *screen);
+void            terminal_screen_set_custom_title           (TerminalScreen *screen,
+                                                            const gchar    *title);
 
-void            terminal_screen_get_size                  (TerminalScreen *screen,
-                                                           glong          *width_chars,
-                                                           glong          *height_chars);
-void            terminal_screen_set_size                  (TerminalScreen *screen,
-                                                           glong           width_chars,
-                                                           glong           height_chars);
+void            terminal_screen_get_size                   (TerminalScreen *screen,
+                                                            glong          *width_chars,
+                                                            glong          *height_chars);
+void            terminal_screen_set_size                   (TerminalScreen *screen,
+                                                            glong           width_chars,
+                                                            glong           height_chars);
 
-void            terminal_screen_get_geometry              (TerminalScreen *screen,
-                                                           glong          *char_width,
-                                                           glong          *char_height,
-                                                           gint           *xpad,
-                                                           gint           *ypad);
+void            terminal_screen_get_geometry               (TerminalScreen *screen,
+                                                            glong          *char_width,
+                                                            glong          *char_height,
+                                                            gint           *xpad,
+                                                            gint           *ypad);
 
-void            terminal_screen_set_window_geometry_hints (TerminalScreen *screen,
-                                                           GtkWindow      *window);
+void            terminal_screen_set_window_geometry_hints  (TerminalScreen *screen,
+                                                            GtkWindow      *window);
 
-void            terminal_screen_force_resize_window       (TerminalScreen *screen,
-                                                           GtkWindow      *window,
-                                                           glong           force_columns,
-                                                           glong           force_rows);
+void            terminal_screen_force_resize_window        (TerminalScreen *screen,
+                                                            GtkWindow      *window,
+                                                            glong           force_columns,
+                                                            glong           force_rows);
 
-gchar          *terminal_screen_get_title                 (TerminalScreen *screen);
+gchar          *terminal_screen_get_title                  (TerminalScreen *screen);
 
-const gchar    *terminal_screen_get_working_directory     (TerminalScreen *screen);
-void            terminal_screen_set_working_directory     (TerminalScreen *screen,
-                                                           const gchar    *directory);
+const gchar    *terminal_screen_get_working_directory      (TerminalScreen *screen);
+void            terminal_screen_set_working_directory      (TerminalScreen *screen,
+                                                            const gchar    *directory);
 
-gboolean        terminal_screen_has_selection             (TerminalScreen *screen);
+gboolean        terminal_screen_has_selection              (TerminalScreen *screen);
 
-void            terminal_screen_copy_clipboard            (TerminalScreen *screen);
+void            terminal_screen_copy_clipboard             (TerminalScreen *screen);
 #if VTE_CHECK_VERSION (0, 49, 2)
-void            terminal_screen_copy_clipboard_html       (TerminalScreen *screen);
+void            terminal_screen_copy_clipboard_html        (TerminalScreen *screen);
 #endif
-void            terminal_screen_paste_clipboard           (TerminalScreen *screen);
-void            terminal_screen_paste_primary             (TerminalScreen *screen);
+void            terminal_screen_paste_clipboard            (TerminalScreen *screen);
+void            terminal_screen_paste_primary              (TerminalScreen *screen);
 
-void            terminal_screen_select_all                (TerminalScreen *screen);
+void            terminal_screen_select_all                 (TerminalScreen *screen);
 
-void            terminal_screen_reset                     (TerminalScreen *screen,
-                                                           gboolean        clear);
+void            terminal_screen_reset                      (TerminalScreen *screen,
+                                                            gboolean        clear);
 
-GSList         *terminal_screen_get_restart_command       (TerminalScreen *screen);
+GSList         *terminal_screen_get_restart_command        (TerminalScreen *screen);
 
-void            terminal_screen_reset_activity            (TerminalScreen *screen);
+void            terminal_screen_reset_activity             (TerminalScreen *screen);
 
-GtkWidget      *terminal_screen_get_tab_label             (TerminalScreen *screen);
+GtkWidget      *terminal_screen_get_tab_label              (TerminalScreen *screen);
 
-void            terminal_screen_focus                     (TerminalScreen *screen);
+void            terminal_screen_focus                      (TerminalScreen *screen);
 
-const gchar    *terminal_screen_get_encoding              (TerminalScreen *screen);
-void            terminal_screen_set_encoding              (TerminalScreen *screen,
-                                                           const gchar    *charset);
+const gchar    *terminal_screen_get_encoding               (TerminalScreen *screen);
+void            terminal_screen_set_encoding               (TerminalScreen *screen,
+                                                            const gchar    *charset);
 
-void            terminal_screen_search_set_gregex         (TerminalScreen *screen,
-                                                           GRegex         *regex,
-                                                           gboolean        wrap_around);
-gboolean        terminal_screen_search_has_gregex         (TerminalScreen *screen);
+void            terminal_screen_search_set_gregex          (TerminalScreen *screen,
+                                                            GRegex         *regex,
+                                                            gboolean        wrap_around);
+gboolean        terminal_screen_search_has_gregex          (TerminalScreen *screen);
 
-void            terminal_screen_search_find_next          (TerminalScreen *screen);
-void            terminal_screen_search_find_previous      (TerminalScreen *screen);
+void            terminal_screen_search_find_next           (TerminalScreen *screen);
+void            terminal_screen_search_find_previous       (TerminalScreen *screen);
 
-void            terminal_screen_update_scrolling_bar      (TerminalScreen *screen);
+void            terminal_screen_update_scrolling_bar       (TerminalScreen *screen);
 
-void            terminal_screen_update_font               (TerminalScreen *screen);
+void            terminal_screen_update_font                (TerminalScreen *screen);
 
-gboolean        terminal_screen_get_input_enabled         (TerminalScreen *screen);
-void            terminal_screen_set_input_enabled         (TerminalScreen *screen,
-                                                           gboolean        enabled);
+gboolean        terminal_screen_get_input_enabled          (TerminalScreen *screen);
+void            terminal_screen_set_input_enabled          (TerminalScreen *screen,
+                                                            gboolean        enabled);
 
-gboolean        terminal_screen_get_scroll_on_output      (TerminalScreen *screen);
-void            terminal_screen_set_scroll_on_output      (TerminalScreen *screen,
-                                                           gboolean        enabled);
+gboolean        terminal_screen_get_scroll_on_output       (TerminalScreen *screen);
+void            terminal_screen_set_scroll_on_output       (TerminalScreen *screen,
+                                                            gboolean        enabled);
 
-void            terminal_screen_save_contents             (TerminalScreen *screen,
-                                                           GOutputStream  *stream,
-                                                           GError         *error);
+void            terminal_screen_save_contents              (TerminalScreen *screen,
+                                                            GOutputStream  *stream,
+                                                            GError         *error);
 
-gboolean        terminal_screen_has_foreground_process    (TerminalScreen *screen);
+gboolean        terminal_screen_has_foreground_process     (TerminalScreen *screen);
 
-void            terminal_screen_feed_text                 (TerminalScreen *screen,
-                                                           const char     *text);
+void            terminal_screen_feed_text                  (TerminalScreen *screen,
+                                                            const char     *text);
 
-const gchar    *terminal_screen_get_custom_fg_color       (TerminalScreen *screen);
+const gchar    *terminal_screen_get_custom_fg_color        (TerminalScreen *screen);
 
-const gchar    *terminal_screen_get_custom_bg_color       (TerminalScreen *screen);
+const gchar    *terminal_screen_get_custom_bg_color        (TerminalScreen *screen);
+
+void            terminal_screen_set_custom_tab_label_color (TerminalScreen *screen,
+                                                            const gchar    *color);
 
 G_END_DECLS
 
diff --git a/terminal/terminal-window-ui.xml b/terminal/terminal-window-ui.xml
index 824660e..9c5a227 100644
--- a/terminal/terminal-window-ui.xml
+++ b/terminal/terminal-window-ui.xml
@@ -64,6 +64,8 @@
       <menuitem action="move-tab-left"/>
       <menuitem action="move-tab-right"/>
       <separator/>
+      <menuitem action="set-tab-label-color"/>
+      <separator/>
       <placeholder name="placeholder-tab-items"/>
     </menu>
     <menu action="help-menu">
@@ -104,6 +106,8 @@
     <menuitem action="move-tab-left"/>
     <menuitem action="move-tab-right"/>
     <separator/>
+    <menuitem action="set-tab-label-color"/>
+    <separator/>
     <menu action="tabs-menu">
       <placeholder name="placeholder-tab-items"/>
     </menu>
diff --git a/terminal/terminal-window.c b/terminal/terminal-window.c
index 9a21fe6..a6894b0 100644
--- a/terminal/terminal-window.c
+++ b/terminal/terminal-window.c
@@ -217,6 +217,8 @@ static void         terminal_window_action_move_tab_right         (GtkAction
                                                                    TerminalWindow         *window);
 static void         terminal_window_action_goto_tab               (GtkRadioAction         *action,
                                                                    GtkNotebook            *notebook);
+static void         terminal_window_action_set_tab_label_color    (GtkAction              *action,
+                                                                   TerminalWindow         *window);
 static void         terminal_window_action_set_title              (GtkAction              *action,
                                                                    TerminalWindow         *window);
 static void         terminal_window_action_search                 (GtkAction              *action,
@@ -347,6 +349,7 @@ static const GtkActionEntry action_entries[] =
     { "next-tab", "go-next", N_ ("_Next Tab"), "<control>Page_Down", N_ ("Switch to next tab"), G_CALLBACK (terminal_window_action_next_tab), },
     { "move-tab-left", NULL, N_ ("Move Tab _Left"), "<control><shift>Page_Up", NULL, G_CALLBACK (terminal_window_action_move_tab_left), },
     { "move-tab-right", NULL, N_ ("Move Tab _Right"), "<control><shift>Page_Down", NULL, G_CALLBACK (terminal_window_action_move_tab_right), },
+    { "set-tab-label-color", NULL, N_ ("Set Tab Label _Color"), NULL, NULL, G_CALLBACK (terminal_window_action_set_tab_label_color), },
   { "help-menu", NULL, N_ ("_Help"), NULL, NULL, NULL, },
     { "contents", "help-browser", N_ ("_Contents"), "F1", N_ ("Display help contents"), G_CALLBACK (terminal_window_action_contents), },
     { "about", "help-about", N_ ("_About"), NULL, NULL, G_CALLBACK (terminal_window_action_about), },
@@ -2087,6 +2090,28 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 
 
 static void
+terminal_window_action_set_tab_label_color (GtkAction      *action,
+                                            TerminalWindow *window)
+{
+  GdkRGBA    color;
+  gchar     *color_string;
+  GtkWidget *dialog = gtk_color_chooser_dialog_new (_("Choose tab label color"), GTK_WINDOW (window));
+  int        response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+  if (response == GTK_RESPONSE_OK)
+    {
+      gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color);
+      color_string = gdk_rgba_to_string (&color);
+      terminal_screen_set_custom_tab_label_color (window->priv->active, color_string);
+      g_free (color_string);
+    }
+
+  gtk_widget_destroy (dialog);
+}
+
+
+
+static void
 title_popover_close (GtkWidget      *popover,
                      TerminalWindow *window)
 {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list