[Libreoffice-commits] .: Branch 'libreoffice-4-0' - sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Mon Jan 14 02:13:06 PST 2013
sw/source/core/undo/unins.cxx | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
New commits:
commit b825f95fa100f2a54032ec5a1ff51de0db17ea1d
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Fri Jan 11 17:32:18 2013 +0100
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.
(cherry picked from commit ecce43877167c1cd6e24208208aed4274100c11a)
Change-Id: If42b0992be29e3336b8e9d736497e4fb09184c55
Reviewed-on: https://gerrit.libreoffice.org/1652
Reviewed-by: Noel Power <noel.power at suse.com>
Tested-by: Noel Power <noel.power at suse.com>
diff --git a/sw/source/core/undo/unins.cxx b/sw/source/core/undo/unins.cxx
index d1cef84..03cc454 100644
--- a/sw/source/core/undo/unins.cxx
+++ b/sw/source/core/undo/unins.cxx
@@ -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>
@@ -250,6 +251,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/...
{
More information about the Libreoffice-commits
mailing list