aboutsummaryrefslogtreecommitdiffstats
path: root/components/style
diff options
context:
space:
mode:
Diffstat (limited to 'components/style')
-rw-r--r--components/style/matching.rs16
-rw-r--r--components/style/rule_tree/mod.rs6
2 files changed, 14 insertions, 8 deletions
diff --git a/components/style/matching.rs b/components/style/matching.rs
index b62bc54bf76..92138945ef9 100644
--- a/components/style/matching.rs
+++ b/components/style/matching.rs
@@ -703,15 +703,17 @@ pub trait MatchMethods : TElement {
let replace_rule_node = |level: CascadeLevel,
pdb: Option<ArcBorrow<Locked<PropertyDeclarationBlock>>>,
path: &mut StrongRuleNode| -> bool {
+ let mut important_rules_changed = false;
let new_node = stylist.rule_tree()
- .update_rule_at_level(level, pdb, path, guards);
- match new_node {
- Some(n) => {
- *path = n;
- level.is_important()
- },
- None => false,
+ .update_rule_at_level(level,
+ pdb,
+ path,
+ guards,
+ &mut important_rules_changed);
+ if let Some(n) = new_node {
+ *path = n;
}
+ important_rules_changed
};
if !context.shared.traversal_flags.for_animation_only() {
diff --git a/components/style/rule_tree/mod.rs b/components/style/rule_tree/mod.rs
index 0dc29232dac..1063cdba6c9 100644
--- a/components/style/rule_tree/mod.rs
+++ b/components/style/rule_tree/mod.rs
@@ -310,12 +310,14 @@ impl RuleTree {
level: CascadeLevel,
pdb: Option<ArcBorrow<Locked<PropertyDeclarationBlock>>>,
path: &StrongRuleNode,
- guards: &StylesheetGuards)
+ guards: &StylesheetGuards,
+ important_rules_changed: &mut bool)
-> Option<StrongRuleNode> {
debug_assert!(level.is_unique_per_element());
// TODO(emilio): Being smarter with lifetimes we could avoid a bit of
// the refcount churn.
let mut current = path.clone();
+ *important_rules_changed = false;
// First walk up until the first less-or-equally specific rule.
let mut children = SmallVec::<[_; 10]>::new();
@@ -335,6 +337,8 @@ impl RuleTree {
// special cases, and replacing them for a `while` loop, avoiding the
// optimizations).
if current.get().level == level {
+ *important_rules_changed |= level.is_important();
+
if let Some(pdb) = pdb {
// If the only rule at the level we're replacing is exactly the
// same as `pdb`, we're done, and `path` is still valid.