summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/source/core/doc/docbm.cxx38
1 files changed, 38 insertions, 0 deletions
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index 69b14e0c1c66..5fef4b78cc15 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -2083,12 +2083,14 @@ namespace
}
virtual void Restore(SwNode& rNd, sal_Int32 nLen, sal_Int32 nCorrLen) SAL_OVERRIDE
{
+ RestoreBkmksLen(rNd, nLen, nCorrLen);
return _RestoreCntntIdx(m_aSaveArr, rNd, nLen, nCorrLen);
}
virtual ~CntntIdxStoreImpl(){};
private:
inline void SaveBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nCntnt);
inline void RestoreBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOffset);
+ inline void RestoreBkmksLen(SwNode& rNd, sal_uLong nLen, sal_Int32 nCorrLen);
};
}
@@ -2161,6 +2163,42 @@ void CntntIdxStoreImpl::RestoreBkmks(SwDoc* pDoc, sal_uLong nNode, sal_Int32 nOf
}
}
+void CntntIdxStoreImpl::RestoreBkmksLen(SwNode& rNd, sal_uLong nLen, sal_Int32 nCorrLen)
+{
+ const SwDoc* pDoc = rNd.GetDoc();
+ IDocumentMarkAccess* const pMarkAccess = const_cast<IDocumentMarkAccess*>(pDoc->getIDocumentMarkAccess());
+ SwCntntNode* pCNd = (SwCntntNode*)rNd.GetCntntNode();
+ for(
+ std::vector<BkmkEntry>::const_iterator pEntry = m_aBkmkEntries.begin();
+ pEntry != m_aBkmkEntries.end();
+ ++pEntry)
+ {
+ if( !pEntry->m_nCntnt >= nCorrLen )
+ {
+ if(pEntry->m_bOther)
+ {
+ if (MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[pEntry->m_nBkmkIdx].get()))
+ {
+ SwPosition aNewPos(pMark->GetOtherMarkPos());
+ aNewPos.nNode = *pCNd;
+ aNewPos.nContent.Assign(pCNd, ::std::min(pEntry->m_nCntnt, static_cast<sal_Int32>(nLen)));
+ pMark->SetOtherMarkPos(aNewPos);
+ }
+ }
+ else
+ {
+ if (MarkBase* pMark = dynamic_cast<MarkBase*>(pMarkAccess->getAllMarksBegin()[pEntry->m_nBkmkIdx].get()))
+ {
+ SwPosition aNewPos(pMark->GetMarkPos());
+ aNewPos.nNode = *pCNd;
+ aNewPos.nContent.Assign(pCNd, ::std::min(pEntry->m_nCntnt, static_cast<sal_Int32>(nLen)));
+ pMark->SetMarkPos(aNewPos);
+ }
+ }
+ }
+ }
+}
+
namespace sw { namespace mark {
boost::shared_ptr<CntntIdxStore> CntntIdxStore::Create()
{