diff options
-rw-r--r-- | sw/source/core/docnode/node.cxx | 20 | ||||
-rw-r--r-- | sw/source/core/text/txtfrm.cxx | 7 |
2 files changed, 22 insertions, 5 deletions
diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx index db564aeec12f..206fcdaf1f0a 100644 --- a/sw/source/core/docnode/node.cxx +++ b/sw/source/core/docnode/node.cxx @@ -1371,8 +1371,24 @@ void SwContentNode::DelFrames(SwRootFrame const*const pLayout) // because that would access deleted wrong-lists sw::UpdateMergedParaForDelete(*pMerged, true, *static_cast<SwTextNode*>(this), 0, Len()); - // pointer should have been updated to a different node - assert(this != pMerged->pParaPropsNode); + if (this == pMerged->pParaPropsNode) + { + // otherwise pointer should have been updated to a different node + assert(this == pMerged->pLastNode); + assert(pMerged->extents.empty()); + for (sal_uLong i = pMerged->pLastNode->GetIndex() - 1;; + --i) + { + assert(pMerged->pFirstNode->GetIndex() <= i); + SwNode *const pNode(GetNodes()[i]); + if (pNode->IsTextNode() + && pNode->GetRedlineMergeFlag() != Merge::Hidden) + { + pMerged->pParaPropsNode = pNode->GetTextNode(); + break; + } + } + } if (this == pMerged->pLastNode) { pMerged->pLastNode = GetNodes()[GetIndex()-1]->GetTextNode(); diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx index a2f62d324e3b..a6264530a96b 100644 --- a/sw/source/core/text/txtfrm.cxx +++ b/sw/source/core/text/txtfrm.cxx @@ -1014,8 +1014,9 @@ static TextFrameIndex UpdateMergedParaForInsert(MergedPara & rMerged, rMerged.extents.emplace(itInsert, const_cast<SwTextNode*>(&rNode), nIndex, nIndex + nLen); text.insert(nTFIndex, rNode.GetText().copy(nIndex, nLen)); nInserted = nLen; - if (rNode.GetIndex() < rMerged.pParaPropsNode->GetIndex()) - { // text inserted before current para-props node + if (rMerged.extents.size() == 1 // also if it was empty! + || rMerged.pParaPropsNode->GetIndex() < rNode.GetIndex()) + { // text inserted after current para-props node rMerged.pParaPropsNode->RemoveFromListRLHidden(); rMerged.pParaPropsNode = &const_cast<SwTextNode&>(rNode); rMerged.pParaPropsNode->AddToListRLHidden(); @@ -1147,7 +1148,7 @@ TextFrameIndex UpdateMergedParaForDelete(MergedPara & rMerged, { rMerged.pParaPropsNode->RemoveFromListRLHidden(); rMerged.pParaPropsNode = rMerged.extents.empty() - ? rMerged.pFirstNode + ? const_cast<SwTextNode*>(rMerged.pLastNode) : rMerged.extents.front().pNode; rMerged.pParaPropsNode->AddToListRLHidden(); } |