summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@canonical.com>2015-05-23 11:20:17 +0200
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2015-05-26 00:51:12 +0200
commit6ab4c4f9c7b12c6058b08e44d35eb8b386348c55 (patch)
tree471f5de83e16e05093eebda4d8135a7c7599fd3e
parent9a949b9c404def205dc39f2f6068a67993c051ad (diff)
use new unocrsrs for SwXParaFrameEnumeration
Change-Id: I0b02b32b0852cc97d4ffcbafdd0405da64b2a9af
-rw-r--r--sw/source/core/unocore/unoobj2.cxx17
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,