| Index: Source/core/rendering/RenderBlockFlow.cpp
|
| diff --git a/Source/core/rendering/RenderBlockFlow.cpp b/Source/core/rendering/RenderBlockFlow.cpp
|
| index f8fecd3b1066b86056075fecc8e4f5fb9398fd34..8e0b0e212ea6853508531de0777fdd7f092e133b 100644
|
| --- a/Source/core/rendering/RenderBlockFlow.cpp
|
| +++ b/Source/core/rendering/RenderBlockFlow.cpp
|
| @@ -758,7 +758,7 @@
|
| }
|
|
|
| // Inline blocks are covered by the isReplaced() check in the avoidFloats method.
|
| - if (avoidsOrIgnoresFloats() || isRenderView()) {
|
| + if (avoidsFloats() || isDocumentElement() || isRenderView() || isFloatingOrOutOfFlowPositioned() || isTableCell()) {
|
| if (m_floatingObjects) {
|
| m_floatingObjects->clear();
|
| }
|
| @@ -788,7 +788,7 @@
|
| RenderBlockFlow* parentBlockFlow = toRenderBlockFlow(parent());
|
| bool parentHasFloats = false;
|
| RenderObject* prev = previousSibling();
|
| - while (prev && (!prev->isBox() || !prev->isRenderBlock() || toRenderBlock(prev)->avoidsOrIgnoresFloats())) {
|
| + while (prev && (!prev->isBox() || !prev->isRenderBlock() || toRenderBlock(prev)->avoidsFloats() || toRenderBlock(prev)->createsBlockFormattingContext())) {
|
| if (prev->isFloating())
|
| parentHasFloats = true;
|
| prev = prev->previousSibling();
|
| @@ -1721,7 +1721,7 @@
|
| FloatingObjectSetIterator end = floatingObjectSet.end();
|
|
|
| for (RenderObject* next = nextSibling(); next; next = next->nextSibling()) {
|
| - if (!next->isRenderBlockFlow() || avoidsOrIgnoresFloats())
|
| + if (!next->isRenderBlockFlow() || next->isFloatingOrOutOfFlowPositioned() || toRenderBlock(next)->avoidsFloats())
|
| continue;
|
|
|
| RenderBlockFlow* nextBlock = toRenderBlockFlow(next);
|
| @@ -1813,7 +1813,7 @@
|
| void RenderBlockFlow::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
|
| {
|
| RenderStyle* oldStyle = style();
|
| - s_canPropagateFloatIntoSibling = oldStyle ? !createsBlockFormattingContext() : false;
|
| + s_canPropagateFloatIntoSibling = oldStyle ? !isFloatingOrOutOfFlowPositioned() && !avoidsFloats() : false;
|
| if (oldStyle && parent() && diff.needsFullLayout() && oldStyle->position() != newStyle.position()
|
| && containsFloats() && !isFloating() && !isOutOfFlowPositioned() && newStyle.hasOutOfFlowPosition())
|
| markAllDescendantsWithFloatsForLayout();
|
| @@ -1829,7 +1829,7 @@
|
| // blocks, then we need to find the top most parent containing that overhanging float and
|
| // then mark its descendants with floats for layout and clear all floats from its next
|
| // sibling blocks that exist in our floating objects list. See bug 56299 and 62875.
|
| - bool canPropagateFloatIntoSibling = !createsBlockFormattingContext();
|
| + bool canPropagateFloatIntoSibling = !isFloatingOrOutOfFlowPositioned() && !avoidsFloats();
|
| if (diff.needsFullLayout() && s_canPropagateFloatIntoSibling && !canPropagateFloatIntoSibling && hasOverhangingFloats()) {
|
| RenderBlockFlow* parentBlockFlow = this;
|
| const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
|
|
|