Updating branch refs/heads/master to 8b7f1c2cdb89a6ba003aae5c397e5b43a8e30f5b (commit) from 1cb91001d3ee1e45793a1ad3f0e0db631597440d (commit)
commit 8b7f1c2cdb89a6ba003aae5c397e5b43a8e30f5b Author: Nick Schermer <n...@xfce.org> Date: Tue Dec 25 13:51:41 2012 +0100 More flexible color scheme handling. Allow all Color properties, so also enabling custom bold/selection colors. Demonstrate in solarized theme. colorschemes/dark-pastels.scheme.in | 3 - colorschemes/solarized-dark.scheme.in | 2 + colorschemes/white-on-black.scheme.in | 1 - terminal/terminal-preferences-dialog.c | 67 ++++++++++++++++++++++---------- 4 files changed, 48 insertions(+), 25 deletions(-) diff --git a/colorschemes/dark-pastels.scheme.in b/colorschemes/dark-pastels.scheme.in index ec614ef..f925a35 100644 --- a/colorschemes/dark-pastels.scheme.in +++ b/colorschemes/dark-pastels.scheme.in @@ -3,7 +3,4 @@ _Name=Dark Pastels ColorForeground=#dcdcdc ColorBackground=#2c2c2c ColorCursor=#dcdcdc -ColorSelection= ColorPalette=#3f3f3f;#705050;#60b48a;#dfaf8f;#9ab8d7;#dc8cc3;#8cd0d3;#dcdcdc;#709080;#dca3a3;#72d5a3;#f0dfaf;#94bff3;#ec93d3;#93e0e3;#ffffff - - diff --git a/colorschemes/solarized-dark.scheme.in b/colorschemes/solarized-dark.scheme.in index 8283954..0d2b86a 100644 --- a/colorschemes/solarized-dark.scheme.in +++ b/colorschemes/solarized-dark.scheme.in @@ -5,3 +5,5 @@ ColorBackground=#002b36 ColorCursor=#93a1a1 TabActivityColor=#dc322f ColorPalette=#073642;#dc322f;#859900;#b58900;#268bd2;#d33682;#2aa198;#eee8d5;#002b36;#cb4b16;#586e75;#657b83;#839496;#6c71c4;#93a1a1;#fdf6e3 +ColorBold=#93a1a1 +ColorBoldUseDefault=FALSE diff --git a/colorschemes/white-on-black.scheme.in b/colorschemes/white-on-black.scheme.in index 9f977ef..35dcfa5 100644 --- a/colorschemes/white-on-black.scheme.in +++ b/colorschemes/white-on-black.scheme.in @@ -1,3 +1,2 @@ [Scheme] _Name=White on Black - diff --git a/terminal/terminal-preferences-dialog.c b/terminal/terminal-preferences-dialog.c index 8a14aab..c1663ac 100644 --- a/terminal/terminal-preferences-dialog.c +++ b/terminal/terminal-preferences-dialog.c @@ -423,15 +423,14 @@ terminal_preferences_dialog_presets_changed (GtkComboBox *combobox GtkTreeIter iter; gchar *path; XfceRc *rc; + GParamSpec **pspecs, *pspec; + guint nspecs; guint n; const gchar *blurb; - GObjectClass *gobject_class; - GParamSpec *pspec; + const gchar *name; const gchar *str; - GValue value = { 0, }; - const gchar *props[] = { "color-foreground", "color-background", - "color-cursor", "color-selection", - "color-palette", "tab-activity-color" }; + GValue src = { 0, }; + GValue dst = { 0, }; if (!gtk_combo_box_get_active_iter (combobox, &iter)) return; @@ -449,29 +448,55 @@ terminal_preferences_dialog_presets_changed (GtkComboBox *combobox xfce_rc_set_group (rc, "Scheme"); - gobject_class = G_OBJECT_GET_CLASS (dialog->preferences); - for (n = 0; n < G_N_ELEMENTS (props); n++) + g_value_init (&src, G_TYPE_STRING); + + /* walk all properties and look for items in the scheme */ + pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (dialog->preferences), &nspecs); + for (n = 0; n < nspecs; ++n) { - /* lookup the property */ - pspec = g_object_class_find_property (gobject_class, props[n]); - terminal_assert (pspec != NULL && G_IS_PARAM_SPEC_STRING (pspec)); + pspec = pspecs[n]; - /* read key from scheme */ + /* get color keys */ blurb = g_param_spec_get_blurb (pspec); + if (strstr (blurb, "Color") == NULL) + continue; + + /* read value */ + name = g_param_spec_get_name (pspec); str = xfce_rc_read_entry_untranslated (rc, blurb, NULL); - /* store value or use default */ - g_value_init (&value, G_TYPE_STRING); - if (str != NULL) - g_value_set_static_string (&value, str); + if (str == NULL || *str == '\0') + { + /* reset to the default value */ + g_value_init (&dst, G_PARAM_SPEC_VALUE_TYPE (pspec)); + g_param_value_set_default (pspec, &dst); + g_object_set_property (G_OBJECT (dialog->preferences), name, &dst); + g_value_unset (&dst); + } else - g_param_value_set_default (pspec, &value); + { + g_value_set_static_string (&src, str); - /* set */ - g_object_set_property (G_OBJECT (dialog->preferences), props[n], &value); - g_value_unset (&value); + if (G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_STRING) + { + /* set the string property */ + g_object_set_property (G_OBJECT (dialog->preferences), name, &src); + } + else + { + /* transform value */ + g_value_init (&dst, G_PARAM_SPEC_VALUE_TYPE (pspec)); + if (G_LIKELY (g_value_transform (&src, &dst))) + g_object_set_property (G_OBJECT (dialog->preferences), name, &dst); + else + g_warning ("Unable to convert scheme property \"%s\"", name); + g_value_unset (&dst); + } + } } + g_free (pspecs); + g_value_unset (&src); xfce_rc_close (rc); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits