summaryrefslogtreecommitdiff
path: root/gtk/gtkcssnode.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-09-12 02:58:28 +0200
committerBenjamin Otte <otte@redhat.com>2015-09-12 05:27:35 +0200
commit610452dda87e4142114448cef99956fcda93ca2b (patch)
treeee62e56391b311d36847975beee01d41d6e7200a /gtk/gtkcssnode.c
parent6118893a4ea75d9f94e5e68ed1c8e0ae73442926 (diff)
downloadgtk+-610452dda87e4142114448cef99956fcda93ca2b.tar.gz
cssnode: Move clear_classes() into the NodeDeclaration
The previous code was crashing when used as the returned classes array would have been invalid after the first deletion. So if a 2nd class would be deleted, invalid memory might have been referenced.
Diffstat (limited to 'gtk/gtkcssnode.c')
-rw-r--r--gtk/gtkcssnode.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 9b5db15ad6..4d2563d7ab 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -1054,14 +1054,10 @@ gtk_css_node_get_junction_sides (GtkCssNode *cssnode)
static void
gtk_css_node_clear_classes (GtkCssNode *cssnode)
{
- const GQuark *classes;
- guint n_classes, i;
-
- classes = gtk_css_node_declaration_get_classes (cssnode->decl, &n_classes);
-
- for (i = 0; i < n_classes; ++i)
+ if (gtk_css_node_declaration_clear_classes (&cssnode->decl))
{
- gtk_css_node_remove_class (cssnode, classes[i]);
+ gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_CLASS);
+ g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_CLASSES]);
}
}