Index: Source/core/rendering/RenderBlock.cpp |
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
index 410ccea586f7631dfdd2cba1cb7633a9dbb0d37d..824f31fee40044fe0a14ab1e92af1f91d2e188e4 100644 |
--- a/Source/core/rendering/RenderBlock.cpp |
+++ b/Source/core/rendering/RenderBlock.cpp |
@@ -1745,6 +1745,8 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit |
for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin(); it != end; ++it) { |
r = *it; |
+ LayoutRectRecorder recorder(*r); |
+ |
SubtreeLayoutScope layoutScope(r); |
// A fixed position element with an absolute positioned ancestor has no way of knowing if the latter has changed position. So |
// if this is a fixed position element, mark it for layout if it has an abspos ancestor and needs to move with that ancestor, i.e. |
@@ -1786,7 +1788,10 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit |
oldLogicalTop = logicalTopForChild(r); |
} |
- r->layoutIfNeeded(); |
+ if (r->needsLayout()) |
+ r->layout(); |
+ else |
+ r->setShouldDoFullRepaintAfterLayout(true); |
Julien - ping for review
2014/03/04 18:22:10
This will cause all positioned objects to be repai
dsinclair
2014/03/04 19:21:52
Done.
|
// Lay out again if our estimate was wrong. |
if (needsBlockDirectionLocationSetBeforeLayout && logicalTopForChild(r) != oldLogicalTop) |