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.
This commit is contained in:
Benjamin Otte
2015-10-27 20:11:08 +01:00
parent 9848fe006e
commit e3ddbc544c

View File

@ -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