summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkcssnode.c19
-rw-r--r--gtk/gtkcssnodeprivate.h2
-rw-r--r--gtk/gtkstylecontext.c2
3 files changed, 22 insertions, 1 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index d81f061a9e..3a317cd831 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -438,6 +438,9 @@ gtk_css_node_reposition (GtkCssNode *node,
{
gtk_css_node_parent_was_unset (node);
}
+
+ if (gtk_css_node_get_style_provider_or_null (node) == NULL)
+ gtk_css_node_invalidate_style_provider (node);
}
if (parent)
@@ -737,6 +740,22 @@ gtk_css_node_get_declaration (GtkCssNode *cssnode)
}
void
+gtk_css_node_invalidate_style_provider (GtkCssNode *cssnode)
+{
+ GtkCssNode *child;
+
+ gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_SOURCE);
+
+ for (child = cssnode->first_child;
+ child;
+ child = child->next_sibling)
+ {
+ if (gtk_css_node_get_style_provider_or_null (child) == NULL)
+ gtk_css_node_invalidate_style_provider (child);
+ }
+}
+
+void
gtk_css_node_invalidate (GtkCssNode *cssnode,
GtkCssChange change)
{
diff --git a/gtk/gtkcssnodeprivate.h b/gtk/gtkcssnodeprivate.h
index 8cfcd2a9c0..7403cd345f 100644
--- a/gtk/gtkcssnodeprivate.h
+++ b/gtk/gtkcssnodeprivate.h
@@ -139,6 +139,8 @@ void gtk_css_node_set_style (GtkCssNode *
GtkCssStyle *style);
GtkCssStyle * gtk_css_node_create_style (GtkCssNode *cssnode);
+void gtk_css_node_invalidate_style_provider
+ (GtkCssNode *cssnode);
void gtk_css_node_invalidate (GtkCssNode *cssnode,
GtkCssChange change);
void gtk_css_node_validate (GtkCssNode *cssnode,
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 2b9f490f6f..33e56ee58b 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -289,7 +289,7 @@ static void
gtk_style_context_cascade_changed (GtkStyleCascade *cascade,
GtkStyleContext *context)
{
- gtk_css_node_invalidate (gtk_style_context_get_root (context), GTK_CSS_CHANGE_SOURCE);
+ gtk_css_node_invalidate_style_provider (gtk_style_context_get_root (context));
}
static void