summaryrefslogtreecommitdiff
path: root/gtk/gtkcssselector.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-10-27 20:11:08 +0100
committerBenjamin Otte <otte@redhat.com>2015-10-27 20:12:38 +0100
commite3ddbc544cef0570b9f6a46e1ad7bec275c99881 (patch)
treeddbe0a718f16958e2b37f254ad43796124aede2e /gtk/gtkcssselector.c
parent9848fe006eb421ca75d8262391595924b31462c5 (diff)
downloadgtk+-e3ddbc544cef0570b9f6a46e1ad7bec275c99881.tar.gz
cssselector: Print name and any selector first
When printing a "compound selector", make sure the name and universal selectors are printed at the beginning and class, id, etc. selectors are printed last.
Diffstat (limited to 'gtk/gtkcssselector.c')
-rw-r--r--gtk/gtkcssselector.c36
1 files changed, 31 insertions, 5 deletions
diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c
index 3be62ee15d..a185cd618b 100644
--- a/gtk/gtkcssselector.c
+++ b/gtk/gtkcssselector.c
@@ -1700,15 +1700,41 @@ void
_gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree,
GString *str)
{
- const GtkCssSelectorTree *parent;
+ const GtkCssSelectorTree *iter;
g_return_if_fail (tree != NULL);
- tree->selector.class->print (&tree->selector, str);
+ /* print name and * selector before others */
+ for (iter = tree;
+ iter && iter->selector.class->is_simple;
+ iter = gtk_css_selector_tree_get_parent (iter))
+ {
+ if (iter->selector.class == &GTK_CSS_SELECTOR_NAME ||
+ iter->selector.class == &GTK_CSS_SELECTOR_ANY)
+ {
+ iter->selector.class->print (&iter->selector, str);
+ }
+ }
+ /* now print other simple selectors */
+ for (iter = tree;
+ iter && iter->selector.class->is_simple;
+ iter = gtk_css_selector_tree_get_parent (iter))
+ {
+ if (iter->selector.class != &GTK_CSS_SELECTOR_NAME &&
+ iter->selector.class != &GTK_CSS_SELECTOR_ANY)
+ {
+ iter->selector.class->print (&iter->selector, str);
+ }
+ }
- parent = gtk_css_selector_tree_get_parent (tree);
- if (parent != NULL)
- _gtk_css_selector_tree_match_print (parent, str);
+ /* now if there's a combinator, print that one */
+ if (iter != NULL)
+ {
+ iter->selector.class->print (&iter->selector, str);
+ tree = gtk_css_selector_tree_get_parent (iter);
+ if (tree)
+ _gtk_css_selector_tree_match_print (tree, str);
+ }
}
void