diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/core/doc/DocumentContentOperationsManager.cxx | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index 3ddcf13c698e..e889a6bcd419 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -3663,21 +3663,28 @@ void DocumentContentOperationsManager::CopyWithFlyInFly( bool isRecreateEndNode(false); if (bMakeNewFrames) // tdf#130685 only after aRedlRest { // recreate from previous node (could be merged now) - if (SwTextNode *const pNode = aSavePos.GetNode().GetTextNode()) + o3tl::sorted_vector<SwTextFrame*> frames; + SwTextNode * pNode = aSavePos.GetNode().GetTextNode(); + SwTextNode *const pEndNode = rInsPos.GetNode().GetTextNode(); + if (pEndNode) { - o3tl::sorted_vector<SwTextFrame*> frames; - SwTextNode *const pEndNode = rInsPos.GetNode().GetTextNode(); - if (pEndNode) + SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pEndNode); + for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next()) { - SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pEndNode); - for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next()) + if (pFrame->getRootFrame()->HasMergedParas()) { - if (pFrame->getRootFrame()->HasMergedParas()) + frames.insert(pFrame); + // tdf#135061 check if end node is merged to a preceding node + if (pNode == nullptr && pFrame->GetMergedPara() + && pFrame->GetMergedPara()->pFirstNode->GetIndex() < aSavePos.GetIndex()) { - frames.insert(pFrame); + pNode = pFrame->GetMergedPara()->pFirstNode; } } } + } + if (pNode != nullptr) + { sw::RecreateStartTextFrames(*pNode); if (!frames.empty()) { // tdf#132187 check if the end node needs new frames |