stylecontext: Fix cache updating
After the parent changes in commit
3a337156d1 we need to refresh the cached
styles after the current style. After all, they now depend on the base
style.
This commit is contained in:
@ -2675,33 +2675,6 @@ gtk_style_context_clear_cache (GtkStyleContext *context)
|
||||
gtk_style_context_clear_property_cache (context);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_style_context_update_cache (GtkStyleContext *context,
|
||||
const GtkBitmask *parent_changes)
|
||||
{
|
||||
GtkStyleContextPrivate *priv;
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
|
||||
if (_gtk_bitmask_is_empty (parent_changes))
|
||||
return;
|
||||
|
||||
priv = context->priv;
|
||||
|
||||
g_hash_table_iter_init (&iter, priv->style_values);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
const GtkCssNodeDeclaration *decl = key;
|
||||
GtkCssStyle *values = value;
|
||||
|
||||
values = update_properties (context, values, decl, parent_changes);
|
||||
|
||||
g_hash_table_iter_replace (&iter, values);
|
||||
}
|
||||
|
||||
gtk_style_context_clear_property_cache (context);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_style_context_do_invalidate (GtkStyleContext *context,
|
||||
const GtkBitmask *changes)
|
||||
@ -2742,6 +2715,41 @@ gtk_style_context_style_needs_full_revalidate (GtkCssStyle *style,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_style_context_update_cache (GtkStyleContext *context,
|
||||
GtkCssChange change,
|
||||
const GtkBitmask *parent_changes)
|
||||
{
|
||||
GtkStyleContextPrivate *priv;
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
|
||||
if (_gtk_bitmask_is_empty (parent_changes))
|
||||
return;
|
||||
|
||||
priv = context->priv;
|
||||
|
||||
g_hash_table_iter_init (&iter, priv->style_values);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
const GtkCssNodeDeclaration *decl = key;
|
||||
GtkCssStyle *style = value;
|
||||
|
||||
if (gtk_style_context_style_needs_full_revalidate (style, change))
|
||||
{
|
||||
g_hash_table_iter_remove (&iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
style = update_properties (context, style, decl, parent_changes);
|
||||
|
||||
g_hash_table_iter_replace (&iter, style);
|
||||
}
|
||||
}
|
||||
|
||||
gtk_style_context_clear_property_cache (context);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_style_context_should_create_transitions (GtkStyleContext *context)
|
||||
{
|
||||
@ -2816,8 +2824,6 @@ _gtk_style_context_validate (GtkStyleContext *context,
|
||||
{
|
||||
GtkCssStyle *values;
|
||||
|
||||
gtk_style_context_clear_cache (context);
|
||||
|
||||
style_info_set_values (info, NULL);
|
||||
values = style_values_lookup (context);
|
||||
|
||||
@ -2835,8 +2841,6 @@ _gtk_style_context_validate (GtkStyleContext *context,
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_style_context_update_cache (context, parent_changes);
|
||||
|
||||
if (!_gtk_bitmask_is_empty (parent_changes))
|
||||
{
|
||||
GtkCssStyle *new_values;
|
||||
@ -2891,6 +2895,9 @@ _gtk_style_context_validate (GtkStyleContext *context,
|
||||
gtk_style_context_do_invalidate (context, changes);
|
||||
|
||||
change = _gtk_css_change_for_child (change);
|
||||
|
||||
gtk_style_context_update_cache (context, change, changes);
|
||||
|
||||
for (list = priv->children; list; list = list->next)
|
||||
{
|
||||
_gtk_style_context_validate (list->data, timestamp, change, changes);
|
||||
|
||||
Reference in New Issue
Block a user