[Libreoffice-commits] core.git: sw/inc sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Jan 16 20:03:27 UTC 2019
sw/inc/unoframe.hxx | 10 ++---
sw/source/core/unocore/unoframe.cxx | 67 ++++++++++++++++++------------------
2 files changed, 39 insertions(+), 38 deletions(-)
New commits:
commit 9bc56a8b61c276a4fa08db3e45b78122273feb2b
Author: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Tue Jan 15 22:23:37 2019 +0100
Commit: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Wed Jan 16 21:02:59 2019 +0100
SwXOLEListener: not SwClient/Modify
Change-Id: Ie27432549e835622ab8480acfb3ed613aef623ab
Reviewed-on: https://gerrit.libreoffice.org/66411
Tested-by: Jenkins
Reviewed-by: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
diff --git a/sw/inc/unoframe.hxx b/sw/inc/unoframe.hxx
index 43876e94a580..8751e7806480 100644
--- a/sw/inc/unoframe.hxx
+++ b/sw/inc/unoframe.hxx
@@ -29,6 +29,7 @@
#include <com/sun/star/document/XEventsSupplier.hpp>
#include <cppuhelper/implbase.hxx>
+#include <svl/listener.hxx>
#include "flyenum.hxx"
#include "frmfmt.hxx"
@@ -306,10 +307,10 @@ public:
virtual css::uno::Reference< css::container::XNameReplace > SAL_CALL getEvents( ) override;
};
-class SwXOLEListener : public cppu::WeakImplHelper<css::util::XModifyListener>,
- public SwClient
+class SwXOLEListener : public cppu::WeakImplHelper<css::util::XModifyListener>, public SvtListener
{
- css::uno::Reference< css::frame::XModel > xOLEModel;
+ SwFormat* m_pOLEFormat;
+ css::uno::Reference<css::frame::XModel> m_xOLEModel;
public:
SwXOLEListener(SwFormat& rOLEFormat, css::uno::Reference< css::frame::XModel > const & xOLE);
@@ -321,8 +322,7 @@ public:
// css::util::XModifyListener
virtual void SAL_CALL modified( const css::lang::EventObject& aEvent ) override;
-protected:
- virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) override;
+ virtual void Notify( const SfxHint& ) override;
};
#endif
diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx
index 07c37323d917..7d748b8984e3 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -3541,11 +3541,25 @@ uno::Reference<container::XNameReplace> SAL_CALL
return new SwFrameEventDescriptor( *this );
}
+namespace
+{
+ SwOLENode* lcl_GetOLENode(const SwFormat* pFormat)
+ {
+ if(!pFormat)
+ return nullptr;
+ const SwNodeIndex* pIdx(pFormat->GetContent().GetContentIdx());
+ if(!pIdx)
+ return nullptr;
+ const SwNodeIndex aIdx(*pIdx, 1);
+ return aIdx.GetNode().GetNoTextNode()->GetOLENode();
+ }
+}
-SwXOLEListener::SwXOLEListener( SwFormat& rOLEFormat, uno::Reference< XModel > const & xOLE) :
- SwClient(&rOLEFormat),
- xOLEModel(xOLE)
+SwXOLEListener::SwXOLEListener( SwFormat& rOLEFormat, uno::Reference< XModel > const & xOLE)
+ : m_pOLEFormat(&rOLEFormat)
+ , m_xOLEModel(xOLE)
{
+ StartListening(m_pOLEFormat->GetNotifier());
}
SwXOLEListener::~SwXOLEListener()
@@ -3554,30 +3568,17 @@ SwXOLEListener::~SwXOLEListener()
void SwXOLEListener::modified( const lang::EventObject& /*rEvent*/ )
{
SolarMutexGuard aGuard;
-
- SwOLENode* pNd = nullptr;
- SwFormat* pFormat = static_cast<SwFormat*>(GetRegisteredIn());
- if(pFormat)
- {const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
- if(pIdx)
- {
- SwNodeIndex aIdx(*pIdx, 1);
- SwNoTextNode* pNoText = aIdx.GetNode().GetNoTextNode();
- pNd = pNoText->GetOLENode();
- }
- }
+ const auto pNd = lcl_GetOLENode(m_pOLEFormat);
if(!pNd)
throw uno::RuntimeException();
-
- uno::Reference < embed::XEmbeddedObject > xIP = pNd->GetOLEObj().GetOleRef();
- if ( xIP.is() )
+ const auto xIP = pNd->GetOLEObj().GetOleRef();
+ if(xIP.is())
{
sal_Int32 nState = xIP->getCurrentState();
- if ( nState == embed::EmbedStates::INPLACE_ACTIVE || nState == embed::EmbedStates::UI_ACTIVE )
+ if(nState == embed::EmbedStates::INPLACE_ACTIVE || nState == embed::EmbedStates::UI_ACTIVE)
+ // if the OLE-Node is UI-Active do nothing
return;
}
-
- // if the OLE-Node is UI-Active do nothing
pNd->SetOLESizeInvalid(true);
pNd->GetDoc()->SetOLEObjModified();
}
@@ -3585,16 +3586,14 @@ void SwXOLEListener::modified( const lang::EventObject& /*rEvent*/ )
void SwXOLEListener::disposing( const lang::EventObject& rEvent )
{
SolarMutexGuard aGuard;
-
- uno::Reference< util::XModifyListener > xListener( this );
-
- uno::Reference< frame::XModel > xModel( rEvent.Source, uno::UNO_QUERY );
- uno::Reference< util::XModifyBroadcaster > xBrdcst(xModel, uno::UNO_QUERY);
-
+ uno::Reference<util::XModifyListener> xListener( this );
+ uno::Reference<frame::XModel> xModel(rEvent.Source, uno::UNO_QUERY);
+ uno::Reference<util::XModifyBroadcaster> xBrdcst(xModel, uno::UNO_QUERY);
+ if(!xBrdcst.is())
+ return;
try
{
- if( xBrdcst.is() )
- xBrdcst->removeModifyListener( xListener );
+ xBrdcst->removeModifyListener(xListener);
}
catch(uno::Exception const &)
{
@@ -3602,11 +3601,13 @@ void SwXOLEListener::disposing( const lang::EventObject& rEvent )
}
}
-void SwXOLEListener::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
+void SwXOLEListener::Notify( const SfxHint& rHint )
{
- ClientModify(this, pOld, pNew);
- if(!GetRegisteredIn())
- xOLEModel = nullptr;
+ if(rHint.GetId() == SfxHintId::Dying)
+ {
+ m_xOLEModel = nullptr;
+ m_pOLEFormat = nullptr;
+ }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list