Index: Source/core/rendering/RenderBlock.cpp |
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
index e500831f7515f4f71dc455f70006eede52b534cb..985ad0b0f0b03f0f0d69c1e921106c3346864ed3 100644 |
--- a/Source/core/rendering/RenderBlock.cpp |
+++ b/Source/core/rendering/RenderBlock.cpp |
@@ -1663,7 +1663,7 @@ bool RenderBlock::simplifiedLayout() |
// are statically positioned and thus need to move with their absolute ancestors. |
bool canContainFixedPosObjects = canContainFixedPositionObjects(); |
if (posChildNeedsLayout() || canContainFixedPosObjects) |
- layoutPositionedObjects(false, !posChildNeedsLayout() && canContainFixedPosObjects); |
+ layoutPositionedObjects(false, !posChildNeedsLayout() && canContainFixedPosObjects ? LayoutPositionedOnlyFixed : LayoutPositionedDefault); |
// Recompute our overflow information. |
// FIXME: We could do better here by computing a temporary overflow object from layoutPositionedObjects and only |
@@ -1731,7 +1731,7 @@ LayoutUnit RenderBlock::marginIntrinsicLogicalWidthForChild(RenderBox* child) co |
return margin; |
} |
-void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPositionObjectsOnly) |
+void RenderBlock::layoutPositionedObjects(bool relayoutChildren, LayoutPositionedInfo info) |
{ |
TrackedRendererListHashSet* positionedDescendants = positionedObjects(); |
if (!positionedDescendants) |
@@ -1750,7 +1750,7 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit |
// 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. |
// it has static position. |
markFixedPositionObjectForLayoutIfNeeded(r, layoutScope); |
- if (fixedPositionObjectsOnly) { |
+ if (info == LayoutPositionedOnlyFixed) { |
r->layoutIfNeeded(); |
continue; |
} |
@@ -1786,6 +1786,9 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit |
oldLogicalTop = logicalTopForChild(r); |
} |
+ if (info == LayoutPositionedContainingBlockMoved) |
+ r->setNeedsLayout(); |
+ |
r->layoutIfNeeded(); |
// Lay out again if our estimate was wrong. |