diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-02-28 13:27:57 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2013-03-01 08:49:14 +0000 |
commit | d10c1b3a54f0264f895c2e5b0056e955f7d07380 (patch) | |
tree | 6ffedd89cae15f252b2921e702a948048ce05248 /sw/source/core | |
parent | 282b920c933337384560b3d2f6a10b156fa5316b (diff) |
sw: remove CH_TXT_ATR_FORMELEMENT when CheckboxFieldmark is deleted
Change-Id: I5f58b558b15f7d11b75554195e10a258d027bcfc
(cherry picked from commit 75b2f6b241046d4467a7c0c9cbf49b4533b46045)
Reviewed-on: https://gerrit.libreoffice.org/2467
Reviewed-by: Miklos Vajna <vmiklos@suse.cz>
Tested-by: Miklos Vajna <vmiklos@suse.cz>
Diffstat (limited to 'sw/source/core')
-rw-r--r-- | sw/source/core/crsr/bookmrk.cxx | 7 | ||||
-rw-r--r-- | sw/source/core/doc/docbm.cxx | 20 | ||||
-rw-r--r-- | sw/source/core/inc/bookmrk.hxx | 5 |
3 files changed, 18 insertions, 14 deletions
diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 7e8448253950..a3c5217f8a8f 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -355,6 +355,13 @@ namespace sw { namespace mark // want this for checkboxes this->GetMarkEnd( ).nContent--; } + + void CheckboxFieldmark::ReleaseDoc(SwDoc* const pDoc) + { + lcl_RemoveFieldMarks(this, pDoc, + CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FORMELEMENT); + } + void CheckboxFieldmark::SetChecked(bool checked) { if ( IsChecked() != checked ) diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index afd9fc2bc2ce..8f785dd4ee78 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -670,18 +670,17 @@ namespace sw { namespace mark #endif } - struct LazyTextFieldmarkDeleter : public IDocumentMarkAccess::ILazyDeleter + struct LazyFieldmarkDeleter : public IDocumentMarkAccess::ILazyDeleter { - ::boost::shared_ptr<IMark> const m_pTextFieldmark; + ::boost::shared_ptr<IMark> const m_pFieldmark; SwDoc *const m_pDoc; - LazyTextFieldmarkDeleter( + LazyFieldmarkDeleter( ::boost::shared_ptr<IMark> const& pMark, SwDoc *const pDoc) - : m_pTextFieldmark(pMark), m_pDoc(pDoc) + : m_pFieldmark(pMark), m_pDoc(pDoc) { } - virtual ~LazyTextFieldmarkDeleter() + virtual ~LazyFieldmarkDeleter() { - dynamic_cast<TextFieldmark*>(m_pTextFieldmark.get()) - ->ReleaseDoc(m_pDoc); + dynamic_cast<Fieldmark *>(m_pFieldmark.get())->ReleaseDoc(m_pDoc); } }; @@ -713,12 +712,7 @@ namespace sw { namespace mark "<MarkManager::deleteMark(..)>" " - Bookmark not found."); m_vFieldmarks.erase(ppFieldmark); - sw::mark::TextFieldmark* pTextFieldmark = dynamic_cast<sw::mark::TextFieldmark*>(ppMark->get()); - if (pTextFieldmark) - { - ret.reset( - new LazyTextFieldmarkDeleter(*ppMark, m_pDoc)); - } + ret.reset(new LazyFieldmarkDeleter(*ppMark, m_pDoc)); break; } case IDocumentMarkAccess::NAVIGATOR_REMINDER: diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx index 6937a193ac2c..d4959b205873 100644 --- a/sw/source/core/inc/bookmrk.hxx +++ b/sw/source/core/inc/bookmrk.hxx @@ -213,6 +213,8 @@ namespace sw { virtual void SetFieldHelptext(const ::rtl::OUString& aFieldHelptext) { m_aFieldHelptext = aFieldHelptext; } + virtual void ReleaseDoc(SwDoc* const) = 0; + virtual void Invalidate(); virtual rtl::OUString ToString() const; @@ -228,7 +230,7 @@ namespace sw { public: TextFieldmark(const SwPaM& rPaM); virtual void InitDoc(SwDoc* const io_pDoc); - void ReleaseDoc(SwDoc* const pDoc); + virtual void ReleaseDoc(SwDoc* const pDoc); }; class CheckboxFieldmark @@ -238,6 +240,7 @@ namespace sw { public: CheckboxFieldmark(const SwPaM& rPaM); virtual void InitDoc(SwDoc* const io_pDoc); + virtual void ReleaseDoc(SwDoc* const pDoc); bool IsChecked() const; void SetChecked(bool checked); |