From b8c0a898adbaec9e0f1ef6bd9ac8e0b09aee9318 Mon Sep 17 00:00:00 2001 From: Oriol Brufau Date: Sun, 29 Oct 2023 17:26:05 +0100 Subject: [PATCH] Further changes required by Servo --- components/style/matching.rs | 9 ++++++--- components/style/servo/selector_parser.rs | 5 +++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/components/style/matching.rs b/components/style/matching.rs index 5e433efc79e..c9e8befccdb 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -508,7 +508,8 @@ trait PrivateMatchMethods: TElement { // If we have modified animation or transitions, we recascade style for this node. if style_changed { - let mut rule_node = new_resolved_styles.primary_style().rules().clone(); + let primary_style = new_resolved_styles.primary_style(); + let mut rule_node = primary_style.rules().clone(); let declarations = context.shared.animations.get_all_declarations( &AnimationSetKey::new_for_non_pseudo(self.as_node().opaque()), context.shared.current_time_for_animations, @@ -529,10 +530,11 @@ trait PrivateMatchMethods: TElement { &mut rule_node, ); - if rule_node != *new_resolved_styles.primary_style().rules() { + if rule_node != *primary_style.rules() { let inputs = CascadeInputs { rules: Some(rule_node), - visited_rules: new_resolved_styles.primary_style().visited_rules().cloned(), + visited_rules: primary_style.visited_rules().cloned(), + flags: primary_style.flags.for_cascade_inputs(), }; new_resolved_styles.primary.style = StyleResolverForElement::new( @@ -621,6 +623,7 @@ trait PrivateMatchMethods: TElement { let inputs = CascadeInputs { rules: Some(rule_node), visited_rules: style.visited_rules().cloned(), + flags: style.flags.for_cascade_inputs(), }; let new_style = StyleResolverForElement::new( diff --git a/components/style/servo/selector_parser.rs b/components/style/servo/selector_parser.rs index 0a1ffc9dbf6..5ee3d91ee95 100644 --- a/components/style/servo/selector_parser.rs +++ b/components/style/servo/selector_parser.rs @@ -7,6 +7,7 @@ //! Servo's selector parser. use crate::attr::{AttrIdentifier, AttrValue}; +use crate::computed_value_flags::ComputedValueFlags; use crate::dom::{OpaqueNode, TElement, TNode}; use crate::invalidation::element::document_state::InvalidationMatchingData; use crate::invalidation::element::element_wrapper::ElementSnapshot; @@ -412,6 +413,10 @@ pub struct SelectorImpl; pub struct ExtraMatchingData { /// The invalidation data to invalidate doc-state pseudo-classes correctly. pub invalidation_data: InvalidationMatchingData, + + /// The invalidation bits from matching container queries. These are here + /// just for convenience mostly. + pub cascade_input_flags: ComputedValueFlags, } impl ::selectors::SelectorImpl for SelectorImpl {