Index: Source/core/rendering/RenderBlock.cpp |
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
index 8f36a8ead64ddd484f3f4e74643f7198ed9348cb..ad9255a4c0d6732b4c6e5b931424b3d2429ae3e8 100644 |
--- a/Source/core/rendering/RenderBlock.cpp |
+++ b/Source/core/rendering/RenderBlock.cpp |
@@ -1791,6 +1791,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. |
@@ -1832,7 +1834,10 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit |
oldLogicalTop = logicalTopForChild(r); |
} |
- r->layoutIfNeeded(); |
+ if (r->needsLayout()) |
+ r->layout(); |
+ else |
+ r->setShouldDoFullRepaintAfterLayout(true); |
// Lay out again if our estimate was wrong. |
if (needsBlockDirectionLocationSetBeforeLayout && logicalTopForChild(r) != oldLogicalTop) |