From: Matthias Clasen Date: Fri, 17 Jan 2020 21:54:38 +0000 (-0500) Subject: cssnodedeclaration: Make print output deterministic X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~308^2~18 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cc3cf581ab064f989613116705395f6ce71c6070;p=gtk4.git 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. --- 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++) {