summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-07-12 10:00:32 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-07-12 10:07:17 +0200
commitec92841fd3ea9ddcaa99d5d352f61971ba9ea5ee (patch)
tree9e8287b3df676b319cde3c9d64c4aed2c86062eb
parentff3dc1d67002be4fa7a73785843087d0bc5ed123 (diff)
SwXTextField::attachToRange: use a fieldmark for annotation range insert
Change-Id: I15d8be58924918cde827ee1d12308cf491cff35b
-rw-r--r--sw/source/core/unocore/unofield.cxx17
1 files changed, 15 insertions, 2 deletions
diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index c30697b7881c..ab200158c545 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -94,6 +94,7 @@
#include <switerator.hxx>
#include <rtl/strbuf.hxx>
#include <vector>
+#include <xmloff/odffields.hxx>
using ::rtl::OUString;
using namespace ::com::sun::star;
@@ -1741,7 +1742,7 @@ void SwXTextField::attachToRange(
UnoActionContext aCont(pDoc);
SwTxtAttr* pTxtAttr = 0;
- if(aPam.HasMark())
+ if(aPam.HasMark() && m_nServiceId != SW_SERVICE_FIELDTYPE_ANNOTATION)
pDoc->DeleteAndJoin(aPam);
SwXTextCursor const*const pTextCursor(
@@ -1752,7 +1753,19 @@ void SwXTextField::attachToRange(
? nsSetAttrMode::SETATTR_FORCEHINTEXPAND
: nsSetAttrMode::SETATTR_DEFAULT;
- pDoc->InsertPoolItem(aPam, aFmt, nInsertFlags);
+ if (*aPam.GetPoint() != *aPam.GetMark() && m_nServiceId == SW_SERVICE_FIELDTYPE_ANNOTATION)
+ {
+ IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
+ pMarksAccess->makeFieldBookmark(
+ aPam,
+ OUString(),
+ ODF_COMMENTRANGE);
+
+ SwPaM aEnd(*aPam.GetMark(), *aPam.GetMark());
+ pDoc->InsertPoolItem(aEnd, aFmt, nInsertFlags);
+ }
+ else
+ pDoc->InsertPoolItem(aPam, aFmt, nInsertFlags);
pTxtAttr = aPam.GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
aPam.GetPoint()->nContent.GetIndex()-1, RES_TXTATR_FIELD);