Kaydet (Commit) f132eaa5 authored tarafından Miklos Vajna's avatar Miklos Vajna

fdo#53487 SwUndoInsert: take care of fieldmarks when deleting field chars

The problem was that while SwUndoInsert removed the field characters, it
didn't remove the fieldmark, so after unding a comment insert, it wasn't
possible to re-insert a comment.
üst 1874df30
......@@ -25,6 +25,7 @@
#include <sot/storage.hxx>
#include <editeng/keepitem.hxx>
#include <svx/svdobj.hxx>
#include <xmloff/odffields.hxx>
#include <docsh.hxx>
#include <fmtcntnt.hxx>
......@@ -242,6 +243,26 @@ void SwUndoInsert::UndoImpl(::sw::UndoRedoContext & rContext)
RemoveIdxFromRange( aPaM, sal_False );
pTxt = new String( pTxtNode->GetTxt().Copy(nCntnt-nLen, nLen) );
pTxtNode->EraseText( aPaM.GetPoint()->nContent, nLen );
// Undo deletes fieldmarks in two step: first the end then the start position.
// Once the start position is deleted, make sure the fieldmark itself is deleted as well.
if (nLen == 1)
{
IDocumentMarkAccess* const pMarkAccess = pTmpDoc->getIDocumentMarkAccess();
for ( IDocumentMarkAccess::const_iterator_t i = pMarkAccess->getMarksBegin(); i != pMarkAccess->getMarksEnd(); ++i)
{
sw::mark::IMark* pMark = i->get();
if (pMark->GetMarkStart() == *aPaM.GetPoint() && pMark->GetMarkStart().nContent == aPaM.GetPoint()->nContent)
{
sw::mark::IFieldmark* pFieldmark = dynamic_cast<sw::mark::IFieldmark*>(pMark);
if (pFieldmark && pFieldmark->GetFieldname() == ODF_COMMENTRANGE)
{
pTmpDoc->getIDocumentMarkAccess()->deleteMark(pMark);
break;
}
}
}
}
}
else // otherwise Graphics/OLE/Text/...
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment