diff options
Diffstat (limited to 'components/style')
-rw-r--r-- | components/style/matching.rs | 16 | ||||
-rw-r--r-- | components/style/rule_tree/mod.rs | 6 |
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. |