diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2015-11-21 15:44:16 -0800 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2015-11-21 15:49:58 -0800 |
commit | 31c013858ff25e14f6984d4caa4d696d6aea33f8 (patch) | |
tree | 91bf66a562cd60c35229c917b5f50b510ca76977 /components/script/dom | |
parent | ea690a2dff64d1cb4eb668473d62f1bbcb19f7c8 (diff) | |
download | servo-31c013858ff25e14f6984d4caa4d696d6aea33f8.tar.gz servo-31c013858ff25e14f6984d4caa4d696d6aea33f8.zip |
Make the needs_reflow method actually work correctly.
The document node is always dirty because layout never clears the bit;
instead, check the dirty bit of the root element.
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/document.rs | 13 | ||||
-rw-r--r-- | components/script/dom/window.rs | 6 |
2 files changed, 15 insertions, 4 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 34a7846b543..1fda0761c66 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -329,9 +329,16 @@ impl Document { } pub fn needs_reflow(&self) -> bool { - self.GetDocumentElement().is_some() && - (self.upcast::<Node>().get_has_dirty_descendants() || - !self.modified_elements.borrow().is_empty()) + // FIXME: This should check the dirty bit on the document, + // not the document element. Needs some layout changes to make + // that workable. + match self.GetDocumentElement() { + Some(root) => { + root.upcast::<Node>().get_has_dirty_descendants() || + !self.modified_elements.borrow().is_empty() + } + None => false, + } } /// Returns the first `base` element in the DOM that has an `href` attribute. diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 4cf2bbe881f..2910632a76f 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -966,7 +966,11 @@ impl Window { return } - self.force_reflow(goal, query_type, reason) + self.force_reflow(goal, query_type, reason); + + // If window_size is `None`, we don't reflow, so the document stays dirty. + // Otherwise, we shouldn't need a reflow immediately after a reflow. + assert!(!self.Document().needs_reflow() || self.window_size.get().is_none()); } pub fn layout(&self) -> &LayoutRPC { |