summaryrefslogtreecommitdiff
path: root/gtk/gtkcssnode.c
diff options
context:
space:
mode:
authorGarrett Regier <garrettregier@gmail.com>2015-09-11 17:49:59 +0200
committerBenjamin Otte <otte@redhat.com>2015-09-11 18:26:11 +0200
commit41b386cd6a84957dd9820083fa594090660c6a5d (patch)
treeacaff7d5678360b58f5b3af546f7c4f2dc0c3a65 /gtk/gtkcssnode.c
parent44460cd7207692e73f4374865a34314800ec2856 (diff)
downloadgtk+-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.c42
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