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 <f2...@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. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits