summaryrefslogtreecommitdiff
path: root/sw/source/core
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-02-28 13:27:57 +0100
committerMiklos Vajna <vmiklos@suse.cz>2013-03-01 08:49:14 +0000
commitd10c1b3a54f0264f895c2e5b0056e955f7d07380 (patch)
tree6ffedd89cae15f252b2921e702a948048ce05248 /sw/source/core
parent282b920c933337384560b3d2f6a10b156fa5316b (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.cxx7
-rw-r--r--sw/source/core/doc/docbm.cxx20
-rw-r--r--sw/source/core/inc/bookmrk.hxx5
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);