Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 31ef55b2640d041f77aa202fa76652f8aeadb880..7c69fbce2ec9d68331e39092f890cd9b9cba5bd5 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -64,6 +64,7 @@ |
#include "core/rendering/RenderInline.h" |
#include "core/rendering/RenderLayer.h" |
#include "core/rendering/RenderListItem.h" |
+#include "core/rendering/RenderMultiColumnSpannerPlaceholder.h" |
#include "core/rendering/RenderObjectInlines.h" |
#include "core/rendering/RenderPart.h" |
#include "core/rendering/RenderScrollbarPart.h" |
@@ -835,6 +836,8 @@ RenderBlock* RenderObject::containingBlock() const |
while (o && o->isAnonymousBlock()) |
o = o->containingBlock(); |
+ } else if (isColumnSpanAll()) { |
+ o = spannerPlaceholder()->containingBlock(); |
} else { |
while (o && ((o->isInline() && !o->isReplaced()) || !o->isRenderBlock())) |
o = o->parent(); |
@@ -2231,6 +2234,19 @@ RenderObject* RenderObject::container(const RenderLayerModelObject* paintInvalid |
o = o->parent(); |
} |
+ } else if (isColumnSpanAll()) { |
+ RenderObject* multicolContainer = spannerPlaceholder()->container(); |
+ if (paintInvalidationContainerSkipped && paintInvalidationContainer) { |
+ // We jumped directly from the spanner to the multicol container. Need to check if |
+ // we skipped |paintInvalidationContainer| on the way. |
+ for (RenderObject* walker = parent(); walker && walker != multicolContainer; walker = walker->parent()) { |
+ if (walker == paintInvalidationContainer) { |
+ *paintInvalidationContainerSkipped = true; |
+ break; |
+ } |
+ } |
+ } |
+ return multicolContainer; |
} |
return o; |
@@ -2384,6 +2400,9 @@ void RenderObject::removeFromRenderFlowThreadRecursive(RenderFlowThread* renderF |
for (RenderObject* child = children->firstChild(); child; child = child->nextSibling()) |
child->removeFromRenderFlowThreadRecursive(renderFlowThread); |
} |
+ |
+ if (renderFlowThread && renderFlowThread != this) |
+ renderFlowThread->flowThreadDescendantWillBeRemoved(this); |
setFlowThreadState(NotInsideFlowThread); |
} |