diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-07-12 10:00:32 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-07-12 10:07:17 +0200 |
commit | ec92841fd3ea9ddcaa99d5d352f61971ba9ea5ee (patch) | |
tree | 9e8287b3df676b319cde3c9d64c4aed2c86062eb | |
parent | ff3dc1d67002be4fa7a73785843087d0bc5ed123 (diff) |
SwXTextField::attachToRange: use a fieldmark for annotation range insert
Change-Id: I15d8be58924918cde827ee1d12308cf491cff35b
-rw-r--r-- | sw/source/core/unocore/unofield.cxx | 17 |
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); |