[gnome-terminal] First shot at Bug 595841 - Allow setting color for bold text



commit e5e0e9598efaf63752a6e8899709c9844bf1ad9d
Author: Behdad Esfahbod <behdad behdad org>
Date:   Fri Dec 11 18:07:38 2009 -0500

    First shot at Bug 595841 - Allow setting color for bold text
    
    The current UI simply adds a Bold color in the Colors tab.  I think
    we should also add a "Use different color for bold" checkbox before
    it, otherwise (that is, right now), you need to change both foreground
    and bold manually.

 src/gnome-terminal.schemas.in |   18 ++++++++++-
 src/profile-editor.c          |   31 +++++++++++++------
 src/profile-preferences.glade |   67 +++++++++++++++++++++++++++++++++++++++-
 src/terminal-profile.c        |    9 ++++-
 src/terminal-profile.h        |    1 +
 src/terminal-screen.c         |   13 +++++--
 6 files changed, 120 insertions(+), 19 deletions(-)
---
diff --git a/src/gnome-terminal.schemas.in b/src/gnome-terminal.schemas.in
index 715c905..f23703a 100644
--- a/src/gnome-terminal.schemas.in
+++ b/src/gnome-terminal.schemas.in
@@ -159,7 +159,7 @@
          <long>
            Default color of text in the terminal, as a color
            specification (can be HTML-style hex digits, or
-           a color name such as "red"). 
+           a color name such as "red").
          </long>
       </locale>
     </schema>
@@ -181,6 +181,22 @@
     </schema>
 
     <schema>
+      <key>/schemas/apps/gnome-terminal/profiles/Default/bold_color</key>
+      <applyto>/apps/gnome-terminal/profiles/Default/bold_color</applyto>
+      <owner>gnome-terminal</owner>
+      <type>string</type>
+      <default>#000000</default>
+      <locale name="C">
+         <short>Default color of bold text in the terminal</short>
+         <long>
+           Default color of bold text in the terminal, as a color
+           specification (can be HTML-style hex digits, or
+           a color name such as "red").
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/gnome-terminal/profiles/Default/title_mode</key>
       <applyto>/apps/gnome-terminal/profiles/Default/title_mode</applyto>
       <owner>gnome-terminal</owner>
diff --git a/src/profile-editor.c b/src/profile-editor.c
index 5aed33a..a5b5755 100644
--- a/src/profile-editor.c
+++ b/src/profile-editor.c
@@ -36,19 +36,20 @@ struct _TerminalColorScheme
   const char *name;
   const GdkColor foreground;
   const GdkColor background;
+  const GdkColor bold;
 };
 
 static const TerminalColorScheme color_schemes[] = {
   { N_("Black on light yellow"),
-    { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xDDDD } },
+    { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xDDDD }, { 0, 0x0000, 0x0000, 0x0000 } },
   { N_("Black on white"),
-    { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xFFFF } },
+    { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xFFFF }, { 0, 0x0000, 0x0000, 0x0000 } },
   { N_("Gray on black"),
-    { 0, 0xAAAA, 0xAAAA, 0xAAAA }, { 0, 0x0000, 0x0000, 0x0000 } },
+    { 0, 0xAAAA, 0xAAAA, 0xAAAA }, { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xAAAA, 0xAAAA, 0xAAAA } },
   { N_("Green on black"),
-    { 0, 0x0000, 0xFFFF, 0x0000 }, { 0, 0x0000, 0x0000, 0x0000 } },
+    { 0, 0x0000, 0xFFFF, 0x0000 }, { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0x0000, 0xFFFF, 0x0000 } },
   { N_("White on black"),
-    { 0, 0xFFFF, 0xFFFF, 0xFFFF }, { 0, 0x0000, 0x0000, 0x0000 } }
+    { 0, 0xFFFF, 0xFFFF, 0xFFFF }, { 0, 0x0000, 0x0000, 0x0000 }, { 0, 0xFFFF, 0xFFFF, 0xFFFF } }
 };
 
 static void profile_forgotten_cb (TerminalProfile           *profile,
@@ -173,6 +174,7 @@ profile_notify_sensitivity_cb (TerminalProfile *profile,
   if (!prop_name ||
       prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) ||
       prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) ||
+      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) ||
       prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS))
     {
       gboolean fg_locked, bg_locked, use_theme_colors;
@@ -185,6 +187,8 @@ profile_notify_sensitivity_cb (TerminalProfile *profile,
       SET_SENSITIVE ("foreground-colorpicker-label", !use_theme_colors && !fg_locked);
       SET_SENSITIVE ("background-colorpicker", !use_theme_colors && !bg_locked);
       SET_SENSITIVE ("background-colorpicker-label", !use_theme_colors && !bg_locked);
+      SET_SENSITIVE ("bold-colorpicker", !use_theme_colors && !fg_locked);
+      SET_SENSITIVE ("bold-colorpicker-label", !use_theme_colors && !fg_locked);
       SET_SENSITIVE ("color-scheme-combobox", !use_theme_colors && !fg_locked && !bg_locked);
       SET_SENSITIVE ("color-scheme-combobox-label", !use_theme_colors && !fg_locked && !bg_locked);
     }
@@ -277,15 +281,16 @@ color_scheme_combo_changed_cb (GtkWidget *combo,
                                TerminalProfile *profile)
 {
   guint i;
-  
+
   i = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
-  
+
   if (i < G_N_ELEMENTS (color_schemes))
     {
       g_signal_handlers_block_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
       g_object_set (profile,
                     TERMINAL_PROFILE_FOREGROUND_COLOR, &color_schemes[i].foreground,
                     TERMINAL_PROFILE_BACKGROUND_COLOR, &color_schemes[i].background,
+                    TERMINAL_PROFILE_BOLD_COLOR, &color_schemes[i].bold,
                     NULL);
       g_signal_handlers_unblock_by_func (profile, G_CALLBACK (profile_colors_notify_scheme_combo_cb), combo);
     }
@@ -300,16 +305,18 @@ profile_colors_notify_scheme_combo_cb (TerminalProfile *profile,
                                        GParamSpec *pspec,
                                        GtkComboBox *combo)
 {
-  const GdkColor *fg, *bg;
+  const GdkColor *fg, *bg, *bold;
   guint i;
 
   fg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR);
   bg = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR);
+  bold = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BOLD_COLOR);
 
   for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
     {
       if (fg && gdk_color_equal (fg, &color_schemes[i].foreground) &&
-          bg && gdk_color_equal (bg, &color_schemes[i].background))
+          bg && gdk_color_equal (bg, &color_schemes[i].background) &&
+          bold && gdk_color_equal (bold, &color_schemes[i].bold))
         break;
     }
   /* If we didn't find a match, then we get the last combo box item which is "custom" */
@@ -476,7 +483,7 @@ init_color_scheme_menu (GtkWidget *combo_box)
   i = G_N_ELEMENTS (color_schemes);
   while (i > 0)
     {
-      gtk_combo_box_prepend_text (GTK_COMBO_BOX (combo_box), 
+      gtk_combo_box_prepend_text (GTK_COMBO_BOX (combo_box),
                                   _(color_schemes[--i].name));
     }
 }
@@ -756,6 +763,9 @@ terminal_profile_edit (TerminalProfile *profile,
   g_signal_connect (profile, "notify::" TERMINAL_PROFILE_BACKGROUND_COLOR,
                     G_CALLBACK (profile_colors_notify_scheme_combo_cb),
                     w);
+  g_signal_connect (profile, "notify::" TERMINAL_PROFILE_BOLD_COLOR,
+                    G_CALLBACK (profile_colors_notify_scheme_combo_cb),
+                    w);
 
 #define CONNECT_WITH_FLAGS(name, prop, flags) terminal_util_bind_object_property_to_widget (G_OBJECT (profile), prop, (GtkWidget *) gtk_builder_get_object (builder, name), flags)
 #define CONNECT(name, prop) CONNECT_WITH_FLAGS (name, prop, 0)
@@ -780,6 +790,7 @@ terminal_profile_edit (TerminalProfile *profile,
   CONNECT ("background-colorpicker", TERMINAL_PROFILE_BACKGROUND_COLOR);
   CONNECT ("background-image-filechooser", TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE);
   CONNECT ("backspace-binding-combobox", TERMINAL_PROFILE_BACKSPACE_BINDING);
+  CONNECT ("bold-colorpicker", TERMINAL_PROFILE_BOLD_COLOR);
   CONNECT ("cursor-shape-combobox", TERMINAL_PROFILE_CURSOR_SHAPE);
   CONNECT ("custom-command-entry", TERMINAL_PROFILE_CUSTOM_COMMAND);
   CONNECT ("darken-background-scale", TERMINAL_PROFILE_BACKGROUND_DARKNESS);
diff --git a/src/profile-preferences.glade b/src/profile-preferences.glade
index ad3c994..73056fb 100644
--- a/src/profile-preferences.glade
+++ b/src/profile-preferences.glade
@@ -922,7 +922,7 @@ Hold the terminal open</property>
 		  <child>
 		    <widget class="GtkLabel" id="label39">
 		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">&lt;b&gt;Foreground and Background&lt;/b&gt;</property>
+		      <property name="label" translatable="yes">&lt;b&gt;Foreground, Background, and Bold&lt;/b&gt;</property>
 		      <property name="use_underline">False</property>
 		      <property name="use_markup">True</property>
 		      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -959,7 +959,7 @@ Hold the terminal open</property>
 		      <child>
 			<widget class="GtkTable" id="table24">
 			  <property name="visible">True</property>
-			  <property name="n_rows">4</property>
+			  <property name="n_rows">5</property>
 			  <property name="n_columns">2</property>
 			  <property name="homogeneous">False</property>
 			  <property name="row_spacing">6</property>
@@ -1159,6 +1159,69 @@ Hold the terminal open</property>
 			      <property name="y_options">fill</property>
 			    </packing>
 			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="bold-colorpicker-label">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Bol_d color:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">bold-colorpicker</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">4</property>
+			      <property name="bottom_attach">5</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox144">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkColorButton" id="bold-colorpicker">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="use_alpha">False</property>
+				  <property name="focus_on_click">True</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<placeholder/>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">4</property>
+			      <property name="bottom_attach">5</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
+			    </packing>
+			  </child>
 			</widget>
 		      </child>
 		    </widget>
diff --git a/src/terminal-profile.c b/src/terminal-profile.c
index 3e8f08a..5e8b340 100644
--- a/src/terminal-profile.c
+++ b/src/terminal-profile.c
@@ -54,6 +54,7 @@ enum
   PROP_BACKGROUND_IMAGE_FILE,
   PROP_BACKGROUND_TYPE,
   PROP_BACKSPACE_BINDING,
+  PROP_BOLD_COLOR,
   PROP_CURSOR_BLINK_MODE,
   PROP_CURSOR_SHAPE,
   PROP_CUSTOM_COMMAND,
@@ -89,6 +90,7 @@ enum
 #define KEY_BACKGROUND_IMAGE_FILE "background_image"
 #define KEY_BACKGROUND_TYPE "background_type"
 #define KEY_BACKSPACE_BINDING "backspace_binding"
+#define KEY_BOLD_COLOR "bold_color"
 #define KEY_CURSOR_BLINK_MODE "cursor_blink_mode"
 #define KEY_CURSOR_SHAPE "cursor_shape"
 #define KEY_CUSTOM_COMMAND "custom_command"
@@ -380,7 +382,7 @@ values_equal (GParamSpec *pspec,
 
   if (g_param_values_cmp (pspec, va, vb) == 0)
     return TRUE;
-  
+
   if (G_PARAM_SPEC_VALUE_TYPE (pspec) == GDK_TYPE_COLOR)
     return gdk_color_equal (g_value_get_boxed (va), g_value_get_boxed (vb));
 
@@ -483,6 +485,7 @@ terminal_profile_reset_property_internal (TerminalProfile *profile,
   switch (pspec->param_id)
     {
       case PROP_FOREGROUND_COLOR:
+      case PROP_BOLD_COLOR:
         g_value_set_boxed (value, &DEFAULT_FOREGROUND_COLOR);
         break;
 
@@ -601,7 +604,7 @@ terminal_profile_gconf_notify_cb (GConfClient *client,
 
       if (!gdk_color_parse (gconf_value_get_string (gconf_value), &color))
         goto out;
-      
+
       g_value_set_boxed (&value, &color);
     }
   else if (G_PARAM_SPEC_VALUE_TYPE (pspec) == PANGO_TYPE_FONT_DESCRIPTION)
@@ -945,6 +948,7 @@ terminal_profile_init (TerminalProfile *profile)
   /* A few properties don't have defaults via the param spec; set them explicitly */
   object_class = G_OBJECT_CLASS (TERMINAL_PROFILE_GET_CLASS (profile));
   terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_FOREGROUND_COLOR), FALSE);
+  terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_BOLD_COLOR), FALSE);
   terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_BACKGROUND_COLOR), FALSE);
   terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_FONT), FALSE);
   terminal_profile_reset_property_internal (profile, g_object_class_find_property (object_class, TERMINAL_PROFILE_PALETTE), FALSE);
@@ -1288,6 +1292,7 @@ terminal_profile_class_init (TerminalProfileClass *klass)
   TERMINAL_PROFILE_PROPERTY_BOOLEAN (USE_THEME_COLORS, DEFAULT_USE_THEME_COLORS, KEY_USE_THEME_COLORS);
 
   TERMINAL_PROFILE_PROPERTY_BOXED (BACKGROUND_COLOR, GDK_TYPE_COLOR, KEY_BACKGROUND_COLOR);
+  TERMINAL_PROFILE_PROPERTY_BOXED (BOLD_COLOR, GDK_TYPE_COLOR, KEY_BOLD_COLOR);
   TERMINAL_PROFILE_PROPERTY_BOXED (FONT, PANGO_TYPE_FONT_DESCRIPTION, KEY_FONT);
   TERMINAL_PROFILE_PROPERTY_BOXED (FOREGROUND_COLOR, GDK_TYPE_COLOR, KEY_FOREGROUND_COLOR);
 
diff --git a/src/terminal-profile.h b/src/terminal-profile.h
index bd8f1dc..087859b 100644
--- a/src/terminal-profile.h
+++ b/src/terminal-profile.h
@@ -72,6 +72,7 @@ typedef enum
 #define TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE  "background-image-file"
 #define TERMINAL_PROFILE_BACKGROUND_TYPE        "background-type"
 #define TERMINAL_PROFILE_BACKSPACE_BINDING      "backspace-binding"
+#define TERMINAL_PROFILE_BOLD_COLOR             "bold-color"
 #define TERMINAL_PROFILE_CURSOR_BLINK_MODE      "cursor-blink-mode"
 #define TERMINAL_PROFILE_CURSOR_SHAPE           "cursor-shape"
 #define TERMINAL_PROFILE_CUSTOM_COMMAND         "custom-command"
diff --git a/src/terminal-screen.c b/src/terminal-screen.c
index 969c762..16cb8e2 100644
--- a/src/terminal-screen.c
+++ b/src/terminal-screen.c
@@ -966,6 +966,7 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile,
       prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS) ||
       prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) ||
       prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) ||
+      prop_name == I_(TERMINAL_PROFILE_BOLD_COLOR) ||
       prop_name == I_(TERMINAL_PROFILE_PALETTE))
     update_color_scheme (screen);
 
@@ -1080,7 +1081,7 @@ update_color_scheme (TerminalScreen *screen)
   TerminalProfile *profile = priv->profile;
   GtkStyle *style;
   GdkColor colors[TERMINAL_PALETTE_SIZE];
-  const GdkColor *fg_color, *bg_color;
+  const GdkColor *fg_color, *bg_color, *bold_color;
   GdkColor fg, bg;
   guint n_colors;
 
@@ -1090,12 +1091,14 @@ update_color_scheme (TerminalScreen *screen)
 
   fg = style->text[GTK_STATE_NORMAL];
   bg = style->base[GTK_STATE_NORMAL];
-
-  fg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR);
-  bg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR);
+  bold_color = NULL;
 
   if (!terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_THEME_COLORS))
     {
+      fg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_FOREGROUND_COLOR);
+      bg_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BACKGROUND_COLOR);
+      bold_color = terminal_profile_get_property_boxed (profile, TERMINAL_PROFILE_BOLD_COLOR);
+
       if (fg_color)
         fg = *fg_color;
       if (bg_color)
@@ -1106,6 +1109,8 @@ update_color_scheme (TerminalScreen *screen)
   terminal_profile_get_palette (priv->profile, colors, &n_colors);
   vte_terminal_set_colors (VTE_TERMINAL (screen), &fg, &bg,
                            colors, n_colors);
+  if (bold_color)
+    vte_terminal_set_color_bold (VTE_TERMINAL (screen), bold_color);
   vte_terminal_set_background_tint_color (VTE_TERMINAL (screen), &bg);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]