Index: Source/core/rendering/RenderBlockFlow.cpp |
diff --git a/Source/core/rendering/RenderBlockFlow.cpp b/Source/core/rendering/RenderBlockFlow.cpp |
index 8c884901d4e4879e21f519c1fe5aaad94745e976..e130b66c88048eaa5bb3ec39da2b18fd9d15cd3c 100644 |
--- a/Source/core/rendering/RenderBlockFlow.cpp |
+++ b/Source/core/rendering/RenderBlockFlow.cpp |
@@ -764,7 +764,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(); |
} |
@@ -794,7 +794,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(); |
@@ -1726,7 +1726,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); |
@@ -1818,7 +1818,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(); |
@@ -1834,7 +1834,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 = !avoidsOrIgnoresFloats(); |
+ bool canPropagateFloatIntoSibling = !isFloatingOrOutOfFlowPositioned() && !avoidsFloats(); |
if (diff.needsFullLayout() && s_canPropagateFloatIntoSibling && !canPropagateFloatIntoSibling && hasOverhangingFloats()) { |
RenderBlockFlow* parentBlockFlow = this; |
const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); |