diff options
author | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2015-05-23 11:20:17 +0200 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2015-05-26 00:51:12 +0200 |
commit | 6ab4c4f9c7b12c6058b08e44d35eb8b386348c55 (patch) | |
tree | 471f5de83e16e05093eebda4d8135a7c7599fd3e | |
parent | 9a949b9c404def205dc39f2f6068a67993c051ad (diff) |
use new unocrsrs for SwXParaFrameEnumeration
Change-Id: I0b02b32b0852cc97d4ffcbafdd0405da64b2a9af
-rw-r--r-- | sw/source/core/unocore/unoobj2.cxx | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx index a6b238e46ab0..c4b9b1f8103d 100644 --- a/sw/source/core/unocore/unoobj2.cxx +++ b/sw/source/core/unocore/unoobj2.cxx @@ -1701,10 +1701,12 @@ public: // created by hasMoreElements uno::Reference< text::XTextContent > m_xNextObject; FrameDependList_t m_Frames; + ::std::shared_ptr<SwUnoCrsr> m_pUnoCursor; Impl(SwPaM const & rPaM) - : SwClient(rPaM.GetDoc()->CreateUnoCrsr(*rPaM.GetPoint(), false)) + : m_pUnoCursor(rPaM.GetDoc()->CreateUnoCrsr2(*rPaM.GetPoint(), false)) { + m_pUnoCursor->Add(this); if (rPaM.HasMark()) { GetCursor()->SetMark(); @@ -1714,7 +1716,6 @@ public: virtual ~Impl() { // Impl owns the cursor; delete it here: SolarMutex is locked - delete GetRegisteredIn(); } SwUnoCrsr * GetCursor() { @@ -1725,6 +1726,7 @@ public: protected: // SwClient virtual void Modify( const SfxPoolItem *pOld, const SfxPoolItem *pNew) SAL_OVERRIDE; + virtual void SwClientNotify(const SwModify& rModify, const SfxHint& rHint) SAL_OVERRIDE; }; struct InvalidFrameDepend { @@ -1750,6 +1752,17 @@ void SwXParaFrameEnumeration::Impl::Modify( const SfxPoolItem *pOld, const SfxPo } } +void SwXParaFrameEnumeration::Impl::SwClientNotify(const SwModify& rModify, const SfxHint& rHint) +{ + SwClient::SwClientNotify(rModify, rHint); + if(m_pUnoCursor && typeid(rHint) == typeid(sw::DocDisposingHint)) + { + assert(m_pUnoCursor->m_bSaneOwnership); + m_pUnoCursor->Remove(this); + m_pUnoCursor.reset(); + } +} + static bool lcl_CreateNextObject(SwUnoCrsr& i_rUnoCrsr, uno::Reference<text::XTextContent> & o_rNextObject, |