From 17772d1618f2716cad59ec747910fa50f20de2be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 5 Aug 2016 13:27:23 -0700 Subject: layout: Fix servo layout to take into account possibly unstyled child nodes in the display: none case. --- components/layout/construct.rs | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'components/layout/construct.rs') diff --git a/components/layout/construct.rs b/components/layout/construct.rs index 809ecaa406a..33b88f6b8c0 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -1374,12 +1374,20 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> // We visit the kids first and reset their HAS_NEWLY_CONSTRUCTED_FLOW flags after checking // them. NOTE: Make sure not to bail out early before resetting all the flags! let mut need_to_reconstruct = false; + + // If the node has display: none, it's possible that we haven't even + // styled the children once, so we need to bailout early here. + if node.style(self.style_context()).get_box().clone_display() == display::T::none { + return false; + } + for kid in node.children() { if kid.flags().contains(HAS_NEWLY_CONSTRUCTED_FLOW) { kid.remove_flags(HAS_NEWLY_CONSTRUCTED_FLOW); need_to_reconstruct = true } } + if need_to_reconstruct { return false } -- cgit v1.2.3