| Index: Source/core/rendering/RenderMultiColumnBlock.cpp
|
| diff --git a/Source/core/rendering/RenderMultiColumnBlock.cpp b/Source/core/rendering/RenderMultiColumnBlock.cpp
|
| index 53c1fe86a66c5df918107f3922f3ffc85aac4933..12c27d1b9c2b8dd5799fcc16599229bbd3663c4c 100644
|
| --- a/Source/core/rendering/RenderMultiColumnBlock.cpp
|
| +++ b/Source/core/rendering/RenderMultiColumnBlock.cpp
|
| @@ -95,45 +95,34 @@ void RenderMultiColumnBlock::checkForPaginationLogicalHeightChange(LayoutUnit& /
|
| setLogicalHeight(0);
|
| }
|
|
|
| -bool RenderMultiColumnBlock::relayoutForPagination(bool, LayoutUnit, LayoutStateMaintainer& statePusher)
|
| +bool RenderMultiColumnBlock::shouldRelayoutMultiColumnBlock()
|
| {
|
| - if (m_inBalancingPass || !requiresBalancing())
|
| + if (!requiresBalancing())
|
| return false;
|
| - m_inBalancingPass = true; // Prevent re-entering this method (and recursion into layout).
|
| -
|
| - bool needsRelayout;
|
| - bool neededRelayout = false;
|
| - bool firstPass = true;
|
| - do {
|
| - // Column heights may change here because of balancing. We may have to do multiple layout
|
| - // passes, depending on how the contents is fitted to the changed column heights. In most
|
| - // cases, laying out again twice or even just once will suffice. Sometimes we need more
|
| - // passes than that, though, but the number of retries should not exceed the number of
|
| - // columns, unless we have a bug.
|
| - needsRelayout = false;
|
| - for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBox->nextSiblingBox()) {
|
| - if (childBox != m_flowThread && childBox->isRenderMultiColumnSet()) {
|
| - RenderMultiColumnSet* multicolSet = toRenderMultiColumnSet(childBox);
|
| - if (multicolSet->calculateBalancedHeight(firstPass)) {
|
| - multicolSet->setChildNeedsLayout(MarkOnlyThis);
|
| - needsRelayout = true;
|
| - }
|
| +
|
| + // Column heights may change here because of balancing. We may have to do multiple layout
|
| + // passes, depending on how the contents is fitted to the changed column heights. In most
|
| + // cases, laying out again twice or even just once will suffice. Sometimes we need more
|
| + // passes than that, though, but the number of retries should not exceed the number of
|
| + // columns, unless we have a bug.
|
| + bool needsRelayout = false;
|
| + for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBox->nextSiblingBox()) {
|
| + if (childBox != m_flowThread && childBox->isRenderMultiColumnSet()) {
|
| + RenderMultiColumnSet* multicolSet = toRenderMultiColumnSet(childBox);
|
| + if (multicolSet->calculateBalancedHeight(!m_inBalancingPass)) {
|
| + multicolSet->setChildNeedsLayout(MarkOnlyThis);
|
| + needsRelayout = true;
|
| }
|
| }
|
| + }
|
|
|
| - if (needsRelayout) {
|
| - // Layout again. Column balancing resulted in a new height.
|
| - neededRelayout = true;
|
| - m_flowThread->setChildNeedsLayout(MarkOnlyThis);
|
| - setChildNeedsLayout(MarkOnlyThis);
|
| - if (firstPass)
|
| - statePusher.pop();
|
| - layoutBlock(false);
|
| - }
|
| - firstPass = false;
|
| - } while (needsRelayout);
|
| - m_inBalancingPass = false;
|
| - return neededRelayout;
|
| + if (needsRelayout) {
|
| + m_flowThread->setChildNeedsLayout(MarkOnlyThis);
|
| + setChildNeedsLayout(MarkOnlyThis);
|
| + }
|
| +
|
| + m_inBalancingPass = needsRelayout;
|
| + return needsRelayout;
|
| }
|
|
|
| void RenderMultiColumnBlock::addChild(RenderObject* newChild, RenderObject* beforeChild)
|
|
|