diff options
-rw-r--r-- | sw/source/core/doc/docbm.cxx | 38 |
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() { |