| 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.
|
|
|