[gtk/matthiasc/css-change-tracking-4: 1/12] cssnodedeclaration: Make print output deterministic
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/css-change-tracking-4: 1/12] cssnodedeclaration: Make print output deterministic
- Date: Fri, 17 Jan 2020 22:26:58 +0000 (UTC)
commit 3d1b43cafc02a8d66148f3b2f3a67d9ae6fb8f67
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jan 17 16:54:38 2020 -0500
cssnodedeclaration: Make print output deterministic
This was depending on the memory order of quarks, which
is not a good fit for tests that depend on this output.
gtk/gtkcssnodedeclaration.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkcssnodedeclaration.c b/gtk/gtkcssnodedeclaration.c
index 6fb7422ae4..0d9a28154d 100644
--- a/gtk/gtkcssnodedeclaration.c
+++ b/gtk/gtkcssnodedeclaration.c
@@ -431,6 +431,17 @@ gtk_css_node_declaration_add_to_widget_path (const GtkCssNodeDeclaration *decl,
gtk_widget_path_iter_set_state (path, pos, decl->state);
}
+static int
+cmpstr (gconstpointer a,
+ gconstpointer b,
+ gpointer data)
+{
+ char **ap = (char **) a;
+ char **bp = (char **) b;
+
+ return g_ascii_strcasecmp (*ap, *bp);
+}
+
/* Append the declaration to the string, in selector format */
void
gtk_css_node_declaration_print (const GtkCssNodeDeclaration *decl,
@@ -453,6 +464,7 @@ gtk_css_node_declaration_print (const GtkCssNodeDeclaration *decl,
};
const GQuark *classes;
guint i;
+ char **classnames;
if (decl->name)
g_string_append (string, decl->name);
@@ -466,11 +478,19 @@ gtk_css_node_declaration_print (const GtkCssNodeDeclaration *decl,
}
classes = get_classes (decl);
+
+ classnames = g_new (char *, decl->n_classes);
+ for (i = 0; i < decl->n_classes; i++)
+ classnames[i] = (char *)g_quark_to_string (classes[i]);
+
+ g_qsort_with_data (classnames, decl->n_classes, sizeof (char *), cmpstr, NULL);
+
for (i = 0; i < decl->n_classes; i++)
{
g_string_append_c (string, '.');
- g_string_append (string, g_quark_to_string (classes[i]));
+ g_string_append (string, classnames[i]);
}
+ g_free (classnames);
for (i = 0; i < G_N_ELEMENTS (state_names); i++)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]