diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 0e1f8af914..02356f4fa0 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1150,7 +1150,7 @@ compare_selector (GtkWidgetPath *path, SelectorPath *selector) { GSList *elements = selector->elements; - gboolean match = TRUE; + gboolean match = TRUE, first = TRUE, first_match = FALSE; guint64 score = 0; gint i; @@ -1165,6 +1165,9 @@ compare_selector (GtkWidgetPath *path, match = compare_selector_element (path, i, elem, &elem_score); + if (match && first) + first_match = TRUE; + /* Only move on to the next index if there is no match * with the current element (whether to continue or not * handled right after in the combinator check), or a @@ -1197,6 +1200,8 @@ compare_selector (GtkWidgetPath *path, score <<= 4; score |= elem_score; } + + first = FALSE; } /* If there are pending selector @@ -1208,6 +1213,13 @@ compare_selector (GtkWidgetPath *path, if (!match) score = 0; + else if (first_match) + { + /* Assign more weight to these selectors + * that matched right from the first element. + */ + score <<= 4; + } return score; }