diff options
author | Benjamin Otte <otte@redhat.com> | 2015-10-27 20:11:08 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-10-27 20:12:38 +0100 |
commit | e3ddbc544cef0570b9f6a46e1ad7bec275c99881 (patch) | |
tree | ddbe0a718f16958e2b37f254ad43796124aede2e /gtk/gtkcssselector.c | |
parent | 9848fe006eb421ca75d8262391595924b31462c5 (diff) | |
download | gtk+-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.c | 36 |
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 == >K_CSS_SELECTOR_NAME || + iter->selector.class == >K_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 != >K_CSS_SELECTOR_NAME && + iter->selector.class != >K_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 |