diff options
author | Benjamin Otte <otte@redhat.com> | 2015-02-25 18:05:07 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-03-18 15:23:32 +0100 |
commit | 68b8f792d6edb7e5e67dbbba0991ce7dc1a7a449 (patch) | |
tree | 16dcb9f0d51ad1e215b5a24ae1e2503b3f905a7c /gtk/gtkcssnode.c | |
parent | 776d99ac516ca9754647bb3a582c53c07cd5c3cf (diff) | |
download | gtk+-68b8f792d6edb7e5e67dbbba0991ce7dc1a7a449.tar.gz |
cssnode: Redo style changed tracking
We don't return a NULL style to mean "no changes" anymore, instead
we check new_style == old_style to mean that.
Make sure the code reflects this, otherwise we'll send
GTK_CSS_CHANGE_PARENT_STYLE invalidations everywhere and screw up
performance.
Diffstat (limited to 'gtk/gtkcssnode.c')
-rw-r--r-- | gtk/gtkcssnode.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index 64e6a3722e..585ead7ea3 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -588,12 +588,12 @@ gtk_css_node_get_next_sibling (GtkCssNode *cssnode) return cssnode->next_sibling; } -static void +static gboolean gtk_css_node_set_style (GtkCssNode *cssnode, GtkCssStyle *style) { if (cssnode->style == style) - return; + return FALSE; if (style) g_object_ref (style); @@ -602,6 +602,8 @@ gtk_css_node_set_style (GtkCssNode *cssnode, g_object_unref (cssnode->style); cssnode->style = style; + + return TRUE; } static void @@ -645,6 +647,7 @@ gtk_css_node_ensure_style (GtkCssNode *cssnode, gint64 current_time) { GtkCssStyle *new_style; + gboolean style_changed; if (!gtk_css_node_needs_new_style (cssnode)) return; @@ -660,15 +663,12 @@ gtk_css_node_ensure_style (GtkCssNode *cssnode, current_time, cssnode->style); - gtk_css_node_propagate_pending_changes (cssnode, new_style != NULL); + style_changed = gtk_css_node_set_style (cssnode, new_style); + g_object_unref (new_style); - if (new_style) - { - gtk_css_node_set_style (cssnode, new_style); - g_object_unref (new_style); - cssnode->pending_changes = 0; - } - + gtk_css_node_propagate_pending_changes (cssnode, style_changed); + + cssnode->pending_changes = 0; cssnode->style_is_invalid = FALSE; } |