summaryrefslogtreecommitdiff
path: root/gtk/gtkstyleproperties.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2011-01-17 04:06:57 +0100
committerCarlos Garnacho <carlosg@gnome.org>2011-01-17 04:44:29 +0100
commit2f207ca749c4d705c39062761335458522c803d2 (patch)
tree9853d5d993abc293d63de1fa26a8b7d74597f0a1 /gtk/gtkstyleproperties.c
parent5f43a51a83c7ff7aea1114fb4dda96800cda83d5 (diff)
downloadgtk+-2f207ca749c4d705c39062761335458522c803d2.tar.gz
Make selectors with no explicit state from higher priority GtkStyleProviders override lower ones with a state.
This makes overriding information from the themes more intuitive
Diffstat (limited to 'gtk/gtkstyleproperties.c')
-rw-r--r--gtk/gtkstyleproperties.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/gtk/gtkstyleproperties.c b/gtk/gtkstyleproperties.c
index 5dc088f29e..0052257cbe 100644
--- a/gtk/gtkstyleproperties.c
+++ b/gtk/gtkstyleproperties.c
@@ -186,7 +186,7 @@ property_data_new (void)
}
static void
-property_data_free (PropertyData *data)
+property_data_remove_values (PropertyData *data)
{
guint i;
@@ -200,6 +200,14 @@ property_data_free (PropertyData *data)
g_value_unset (&value_data->value);
}
+ if (data->values->len > 0)
+ g_array_remove_range (data->values, 0, data->values->len);
+}
+
+static void
+property_data_free (PropertyData *data)
+{
+ property_data_remove_values (data);
g_array_free (data->values, TRUE);
g_slice_free (PropertyData, data);
}
@@ -1203,6 +1211,16 @@ gtk_style_properties_merge (GtkStyleProperties *props,
GValue *value;
data = &g_array_index (prop_to_merge->values, ValueData, i);
+
+ if (replace && data->state == GTK_STATE_FLAG_NORMAL &&
+ G_VALUE_TYPE (&data->value) != PANGO_TYPE_FONT_DESCRIPTION)
+ {
+ /* Let normal state override all states
+ * previously set in the original set
+ */
+ property_data_remove_values (prop);
+ }
+
value = property_data_get_value (prop, data->state);
if (G_VALUE_TYPE (&data->value) == PANGO_TYPE_FONT_DESCRIPTION &&