diff options
author | Garrett Regier <garrettregier@gmail.com> | 2015-09-11 17:49:59 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-09-11 18:26:11 +0200 |
commit | 41b386cd6a84957dd9820083fa594090660c6a5d (patch) | |
tree | acaff7d5678360b58f5b3af546f7c4f2dc0c3a65 /gtk/gtkcssnode.c | |
parent | 44460cd7207692e73f4374865a34314800ec2856 (diff) | |
download | gtk+-41b386cd6a84957dd9820083fa594090660c6a5d.tar.gz |
cssnode: Optimize listing of classes
Avoid creating the GList of strings when the GQuarks
will just be determined again. Instead have
gtk_style_context_list_classes() do it specifically.
Diffstat (limited to 'gtk/gtkcssnode.c')
-rw-r--r-- | gtk/gtkcssnode.c | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index 671613f230..9b5db15ad6 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -1054,16 +1054,15 @@ gtk_css_node_get_junction_sides (GtkCssNode *cssnode) static void gtk_css_node_clear_classes (GtkCssNode *cssnode) { - GList *list, *l; - - list = gtk_css_node_declaration_list_classes (cssnode->decl); + const GQuark *classes; + guint n_classes, i; + + classes = gtk_css_node_declaration_get_classes (cssnode->decl, &n_classes); - for (l = list; l; l = l->next) + for (i = 0; i < n_classes; ++i) { - gtk_css_node_remove_class (cssnode, GPOINTER_TO_UINT (l->data)); + gtk_css_node_remove_class (cssnode, classes[i]); } - - g_list_free (list); } void @@ -1090,22 +1089,20 @@ gtk_css_node_set_classes (GtkCssNode *cssnode, char ** gtk_css_node_get_classes (GtkCssNode *cssnode) { - GList *list, *l; - GPtrArray *result; - - list = gtk_css_node_declaration_list_classes (cssnode->decl); - result = g_ptr_array_new (); + const GQuark *classes; + char **result; + guint n_classes, i, j; - for (l = list; l; l = l->next) + classes = gtk_css_node_declaration_get_classes (cssnode->decl, &n_classes); + result = g_new (char *, n_classes + 1); + + for (i = n_classes, j = 0; i-- > 0; ++j) { - g_ptr_array_add (result, g_strdup (g_quark_to_string (GPOINTER_TO_UINT (l->data)))); + result[j] = g_strdup (g_quark_to_string (classes[i])); } - g_ptr_array_add (result, NULL); - - g_list_free (list); - - return (char **) g_ptr_array_free (result, FALSE); + result[n_classes] = NULL; + return result; } void @@ -1137,10 +1134,11 @@ gtk_css_node_has_class (GtkCssNode *cssnode, return gtk_css_node_declaration_has_class (cssnode->decl, style_class); } -GList * -gtk_css_node_list_classes (GtkCssNode *cssnode) +const GQuark * +gtk_css_node_list_classes (GtkCssNode *cssnode, + guint *n_classes) { - return gtk_css_node_declaration_list_classes (cssnode->decl); + return gtk_css_node_declaration_get_classes (cssnode->decl, n_classes); } void |