diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-01-20 14:54:06 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-01-23 07:56:34 +0200 |
commit | ca958f886c660ce096ef59cef808fbf46b116e3c (patch) | |
tree | c1e7ed669a0b0c26425f55e8b72edae1dc83623c | |
parent | 9605f1cd1375fc56e3a3ec76fa04e5a7a3caa70f (diff) |
use rtl::Reference in SfxInPlaceClient
instead of manual acquire/release
Change-Id: I4ebbdbcbd619991c3dae0733b797f310903f96e6
-rw-r--r-- | include/sfx2/ipclient.hxx | 3 | ||||
-rw-r--r-- | sfx2/source/view/ipclient.cxx | 174 |
2 files changed, 88 insertions, 89 deletions
diff --git a/include/sfx2/ipclient.hxx b/include/sfx2/ipclient.hxx index 0615ca6da2f5..23ec5e412d77 100644 --- a/include/sfx2/ipclient.hxx +++ b/include/sfx2/ipclient.hxx @@ -25,6 +25,7 @@ #include <com/sun/star/uno/Reference.h> #include <com/sun/star/embed/Aspects.hpp> #include <com/sun/star/embed/XEmbeddedObject.hpp> +#include <rtl/ref.hxx> #include <tools/gen.hxx> @@ -41,7 +42,7 @@ class SFX2_DLLPUBLIC SfxInPlaceClient { friend class SfxInPlaceClient_Impl; - SfxInPlaceClient_Impl* m_pImp; + rtl::Reference<SfxInPlaceClient_Impl> m_xImp; SfxViewShell* m_pViewSh; VclPtr<vcl::Window> m_pEditWin; diff --git a/sfx2/source/view/ipclient.cxx b/sfx2/source/view/ipclient.cxx index 69b16c0c8740..5d29f6514ac5 100644 --- a/sfx2/source/view/ipclient.cxx +++ b/sfx2/source/view/ipclient.cxx @@ -599,18 +599,17 @@ IMPL_LINK_NOARG(SfxInPlaceClient_Impl, TimerHdl, Timer *, void) SfxInPlaceClient::SfxInPlaceClient( SfxViewShell* pViewShell, vcl::Window *pDraw, sal_Int64 nAspect ) : - m_pImp( new SfxInPlaceClient_Impl ), + m_xImp( new SfxInPlaceClient_Impl ), m_pViewSh( pViewShell ), m_pEditWin( pDraw ) { - m_pImp->acquire(); - m_pImp->m_pClient = this; - m_pImp->m_nAspect = nAspect; - m_pImp->m_aScaleWidth = m_pImp->m_aScaleHeight = Fraction(1,1); - m_pImp->m_xClient = static_cast< embed::XEmbeddedClient* >( m_pImp ); + m_xImp->m_pClient = this; + m_xImp->m_nAspect = nAspect; + m_xImp->m_aScaleWidth = m_xImp->m_aScaleHeight = Fraction(1,1); + m_xImp->m_xClient = static_cast< embed::XEmbeddedClient* >( m_xImp.get() ); pViewShell->NewIPClient_Impl(this); - m_pImp->m_aTimer.SetTimeout( SFX_CLIENTACTIVATE_TIMEOUT ); - m_pImp->m_aTimer.SetTimeoutHdl( LINK( m_pImp, SfxInPlaceClient_Impl, TimerHdl ) ); + m_xImp->m_aTimer.SetTimeout( SFX_CLIENTACTIVATE_TIMEOUT ); + m_xImp->m_aTimer.SetTimeoutHdl( LINK( m_xImp.get(), SfxInPlaceClient_Impl, TimerHdl ) ); } @@ -619,14 +618,13 @@ SfxInPlaceClient::~SfxInPlaceClient() m_pViewSh->IPClientGone_Impl(this); // deleting the client before storing the object means discarding all changes - m_pImp->m_bStoreObject = false; + m_xImp->m_bStoreObject = false; SetObject(nullptr); - m_pImp->m_pClient = nullptr; + m_xImp->m_pClient = nullptr; - // the next call will destroy m_pImp if no other reference to it exists - m_pImp->m_xClient.clear(); - m_pImp->release(); + // the next call will destroy m_xImp if no other reference to it exists + m_xImp->m_xClient.clear(); // TODO/LATER: // the class is not intended to be used in multithreaded environment; @@ -639,7 +637,7 @@ void SfxInPlaceClient::SetObjectState( sal_Int32 nState ) { if ( GetObject().is() ) { - if ( m_pImp->m_nAspect == embed::Aspects::MSOLE_ICON + if ( m_xImp->m_nAspect == embed::Aspects::MSOLE_ICON && ( nState == embed::EmbedStates::UI_ACTIVE || nState == embed::EmbedStates::INPLACE_ACTIVE ) ) { OSL_FAIL( "Iconified object should not be activated inplace!\n" ); @@ -659,31 +657,31 @@ void SfxInPlaceClient::SetObjectState( sal_Int32 nState ) sal_Int64 SfxInPlaceClient::GetObjectMiscStatus() const { if ( GetObject().is() ) - return GetObject()->getStatus( m_pImp->m_nAspect ); + return GetObject()->getStatus( m_xImp->m_nAspect ); return 0; } const uno::Reference < embed::XEmbeddedObject >& SfxInPlaceClient::GetObject() const { - return m_pImp->m_xObject; + return m_xImp->m_xObject; } void SfxInPlaceClient::SetObject( const uno::Reference < embed::XEmbeddedObject >& rObject ) { - if ( m_pImp->m_xObject.is() && rObject != m_pImp->m_xObject ) + if ( m_xImp->m_xObject.is() && rObject != m_xImp->m_xObject ) { - DBG_ASSERT( GetObject()->getClientSite() == m_pImp->m_xClient, "Wrong ClientSite!" ); - if ( GetObject()->getClientSite() == m_pImp->m_xClient ) + DBG_ASSERT( GetObject()->getClientSite() == m_xImp->m_xClient, "Wrong ClientSite!" ); + if ( GetObject()->getClientSite() == m_xImp->m_xClient ) { if ( GetObject()->getCurrentState() != embed::EmbedStates::LOADED ) SetObjectState( embed::EmbedStates::RUNNING ); - m_pImp->m_xObject->removeEventListener( uno::Reference < document::XEventListener >( m_pImp->m_xClient, uno::UNO_QUERY ) ); - m_pImp->m_xObject->removeStateChangeListener( uno::Reference < embed::XStateChangeListener >( m_pImp->m_xClient, uno::UNO_QUERY ) ); + m_xImp->m_xObject->removeEventListener( uno::Reference < document::XEventListener >( m_xImp->m_xClient, uno::UNO_QUERY ) ); + m_xImp->m_xObject->removeStateChangeListener( uno::Reference < embed::XStateChangeListener >( m_xImp->m_xClient, uno::UNO_QUERY ) ); try { - m_pImp->m_xObject->setClientSite( nullptr ); + m_xImp->m_xObject->setClientSite( nullptr ); } catch( uno::Exception& ) { @@ -696,37 +694,37 @@ void SfxInPlaceClient::SetObject( const uno::Reference < embed::XEmbeddedObject // sometimes applications reconnect clients on shutting down because it happens in their Paint methods return; - m_pImp->m_xObject = rObject; + m_xImp->m_xObject = rObject; if ( rObject.is() ) { // as soon as an object was connected to a client it has to be checked whether the object wants // to be activated - rObject->addStateChangeListener( uno::Reference < embed::XStateChangeListener >( m_pImp->m_xClient, uno::UNO_QUERY ) ); - rObject->addEventListener( uno::Reference < document::XEventListener >( m_pImp->m_xClient, uno::UNO_QUERY ) ); + rObject->addStateChangeListener( uno::Reference < embed::XStateChangeListener >( m_xImp->m_xClient, uno::UNO_QUERY ) ); + rObject->addEventListener( uno::Reference < document::XEventListener >( m_xImp->m_xClient, uno::UNO_QUERY ) ); try { - rObject->setClientSite( m_pImp->m_xClient ); + rObject->setClientSite( m_xImp->m_xClient ); } catch( uno::Exception& ) { OSL_FAIL( "Can not set the client site!\n" ); } - m_pImp->m_aTimer.Start(); + m_xImp->m_aTimer.Start(); } else - m_pImp->m_aTimer.Stop(); + m_xImp->m_aTimer.Stop(); } bool SfxInPlaceClient::SetObjArea( const Rectangle& rArea ) { - if( rArea != m_pImp->m_aObjArea ) + if( rArea != m_xImp->m_aObjArea ) { - m_pImp->m_aObjArea = rArea; - m_pImp->SizeHasChanged(); + m_xImp->m_aObjArea = rArea; + m_xImp->SizeHasChanged(); Invalidate(); return true; @@ -738,26 +736,26 @@ bool SfxInPlaceClient::SetObjArea( const Rectangle& rArea ) const Rectangle& SfxInPlaceClient::GetObjArea() const { - return m_pImp->m_aObjArea; + return m_xImp->m_aObjArea; } Rectangle SfxInPlaceClient::GetScaledObjArea() const { - Rectangle aRealObjArea( m_pImp->m_aObjArea ); - aRealObjArea.SetSize( Size( Fraction( aRealObjArea.GetWidth() ) * m_pImp->m_aScaleWidth, - Fraction( aRealObjArea.GetHeight() ) * m_pImp->m_aScaleHeight ) ); + Rectangle aRealObjArea( m_xImp->m_aObjArea ); + aRealObjArea.SetSize( Size( Fraction( aRealObjArea.GetWidth() ) * m_xImp->m_aScaleWidth, + Fraction( aRealObjArea.GetHeight() ) * m_xImp->m_aScaleHeight ) ); return aRealObjArea; } void SfxInPlaceClient::SetSizeScale( const Fraction & rScaleWidth, const Fraction & rScaleHeight ) { - if ( m_pImp->m_aScaleWidth != rScaleWidth || m_pImp->m_aScaleHeight != rScaleHeight ) + if ( m_xImp->m_aScaleWidth != rScaleWidth || m_xImp->m_aScaleHeight != rScaleHeight ) { - m_pImp->m_aScaleWidth = rScaleWidth; - m_pImp->m_aScaleHeight = rScaleHeight; + m_xImp->m_aScaleWidth = rScaleWidth; + m_xImp->m_aScaleHeight = rScaleHeight; - m_pImp->SizeHasChanged(); + m_xImp->SizeHasChanged(); // TODO/LATER: Invalidate seems to trigger (wrong) recalculations of the ObjArea, so it's better // not to call it here, but maybe it sounds reasonable to do so. @@ -768,13 +766,13 @@ void SfxInPlaceClient::SetSizeScale( const Fraction & rScaleWidth, const Fractio void SfxInPlaceClient::SetObjAreaAndScale( const Rectangle& rArea, const Fraction& rScaleWidth, const Fraction& rScaleHeight ) { - if( rArea != m_pImp->m_aObjArea || m_pImp->m_aScaleWidth != rScaleWidth || m_pImp->m_aScaleHeight != rScaleHeight ) + if( rArea != m_xImp->m_aObjArea || m_xImp->m_aScaleWidth != rScaleWidth || m_xImp->m_aScaleHeight != rScaleHeight ) { - m_pImp->m_aObjArea = rArea; - m_pImp->m_aScaleWidth = rScaleWidth; - m_pImp->m_aScaleHeight = rScaleHeight; + m_xImp->m_aObjArea = rArea; + m_xImp->m_aScaleWidth = rScaleWidth; + m_xImp->m_aScaleHeight = rScaleHeight; - m_pImp->SizeHasChanged(); + m_xImp->SizeHasChanged(); Invalidate(); } @@ -783,13 +781,13 @@ void SfxInPlaceClient::SetObjAreaAndScale( const Rectangle& rArea, const Fractio const Fraction& SfxInPlaceClient::GetScaleWidth() const { - return m_pImp->m_aScaleWidth; + return m_xImp->m_aScaleWidth; } const Fraction& SfxInPlaceClient::GetScaleHeight() const { - return m_pImp->m_aScaleHeight; + return m_xImp->m_aScaleHeight; } @@ -798,9 +796,9 @@ void SfxInPlaceClient::Invalidate() // TODO/LATER: do we need both? // the object area is provided in logical coordinates of the window but without scaling applied - Rectangle aRealObjArea( m_pImp->m_aObjArea ); - aRealObjArea.SetSize( Size( Fraction( aRealObjArea.GetWidth() ) * m_pImp->m_aScaleWidth, - Fraction( aRealObjArea.GetHeight() ) * m_pImp->m_aScaleHeight ) ); + Rectangle aRealObjArea( m_xImp->m_aObjArea ); + aRealObjArea.SetSize( Size( Fraction( aRealObjArea.GetWidth() ) * m_xImp->m_aScaleWidth, + Fraction( aRealObjArea.GetHeight() ) * m_xImp->m_aScaleHeight ) ); m_pEditWin->Invalidate( aRealObjArea ); ViewChanged(); @@ -810,7 +808,7 @@ void SfxInPlaceClient::Invalidate() bool SfxInPlaceClient::IsObjectUIActive() const { try { - return ( m_pImp->m_xObject.is() && ( m_pImp->m_xObject->getCurrentState() == embed::EmbedStates::UI_ACTIVE ) ); + return ( m_xImp->m_xObject.is() && ( m_xImp->m_xObject->getCurrentState() == embed::EmbedStates::UI_ACTIVE ) ); } catch( uno::Exception& ) {} @@ -824,12 +822,12 @@ bool SfxInPlaceClient::IsObjectInPlaceActive() const try { return( ( - m_pImp->m_xObject.is() && - (m_pImp->m_xObject->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE) + m_xImp->m_xObject.is() && + (m_xImp->m_xObject->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE) ) || ( - m_pImp->m_xObject.is() && - (m_pImp->m_xObject->getCurrentState() == embed::EmbedStates::UI_ACTIVE) + m_xImp->m_xObject.is() && + (m_xImp->m_xObject->getCurrentState() == embed::EmbedStates::UI_ACTIVE) ) ); } @@ -857,7 +855,7 @@ SfxInPlaceClient* SfxInPlaceClient::GetClient( SfxObjectShell* pDoc, const css:: sal_Int64 SfxInPlaceClient::GetAspect() const { - return m_pImp->m_nAspect; + return m_xImp->m_nAspect; } ErrCode SfxInPlaceClient::DoVerb( long nVerb ) @@ -865,14 +863,14 @@ ErrCode SfxInPlaceClient::DoVerb( long nVerb ) SfxErrorContext aEc( ERRCTX_SO_DOVERB, m_pViewSh->GetWindow(), RID_SO_ERRCTX ); ErrCode nError = ERRCODE_NONE; - if ( m_pImp->m_xObject.is() ) + if ( m_xImp->m_xObject.is() ) { bool bSaveCopyAs = false; if ( nVerb == -8 ) // "Save Copy as..." { - svt::EmbeddedObjectRef::TryRunningState( m_pImp->m_xObject ); + svt::EmbeddedObjectRef::TryRunningState( m_xImp->m_xObject ); // TODO/LATER: this special verb should disappear when outplace activation is completely available - uno::Reference< frame::XModel > xEmbModel( m_pImp->m_xObject->getComponent(), uno::UNO_QUERY ); + uno::Reference< frame::XModel > xEmbModel( m_xImp->m_xObject->getComponent(), uno::UNO_QUERY ); if ( xEmbModel.is() ) { bSaveCopyAs = true; @@ -905,11 +903,11 @@ ErrCode SfxInPlaceClient::DoVerb( long nVerb ) if ( !bSaveCopyAs ) { - if ( m_pImp->m_nAspect == embed::Aspects::MSOLE_ICON ) + if ( m_xImp->m_nAspect == embed::Aspects::MSOLE_ICON ) { // the common persistence is supported by objects and links - uno::Reference< embed::XEmbeddedOleObject > xEmbeddedOleObject( m_pImp->m_xObject, uno::UNO_QUERY ); + uno::Reference< embed::XEmbeddedOleObject > xEmbeddedOleObject( m_xImp->m_xObject, uno::UNO_QUERY ); if ( xEmbeddedOleObject.is() && (nVerb == embed::EmbedVerbs::MS_OLEVERB_PRIMARY || nVerb == embed::EmbedVerbs::MS_OLEVERB_OPEN || nVerb == embed::EmbedVerbs::MS_OLEVERB_SHOW )) nVerb = embed::EmbedVerbs::MS_OLEVERB_SHOW; @@ -926,9 +924,9 @@ ErrCode SfxInPlaceClient::DoVerb( long nVerb ) m_pViewSh->GetViewFrame()->GetFrame().LockResize_Impl(true); try { - m_pImp->m_xObject->setClientSite( m_pImp->m_xClient ); + m_xImp->m_xObject->setClientSite( m_xImp->m_xClient ); - m_pImp->m_xObject->doVerb( nVerb ); + m_xImp->m_xObject->doVerb( nVerb ); } catch ( embed::UnreachableStateException& ) { @@ -937,20 +935,20 @@ ErrCode SfxInPlaceClient::DoVerb( long nVerb ) // a workaround for the default verb, usually makes sense for alien objects try { - m_pImp->m_xObject->doVerb( -9 ); // open own view, a workaround verb that is not visible + m_xImp->m_xObject->doVerb( -9 ); // open own view, a workaround verb that is not visible - if ( m_pImp->m_xObject->getCurrentState() == embed::EmbedStates::UI_ACTIVE ) + if ( m_xImp->m_xObject->getCurrentState() == embed::EmbedStates::UI_ACTIVE ) { // the object was converted to OOo object - awt::Size aSize = m_pImp->m_xObject->getVisualAreaSize( m_pImp->m_nAspect ); - MapMode aObjectMap( VCLUnoHelper::UnoEmbed2VCLMapUnit( m_pImp->m_xObject->getMapUnit( m_pImp->m_nAspect ) ) ); + awt::Size aSize = m_xImp->m_xObject->getVisualAreaSize( m_xImp->m_nAspect ); + MapMode aObjectMap( VCLUnoHelper::UnoEmbed2VCLMapUnit( m_xImp->m_xObject->getMapUnit( m_xImp->m_nAspect ) ) ); MapMode aClientMap( GetEditWin()->GetMapMode().GetMapUnit() ); Size aNewSize = GetEditWin()->LogicToLogic( Size( aSize.Width, aSize.Height ), &aObjectMap, &aClientMap ); Rectangle aScaledArea = GetScaledObjArea(); - m_pImp->m_aObjArea.SetSize( aNewSize ); - m_pImp->m_aScaleWidth = Fraction( aScaledArea.GetWidth(), aNewSize.Width() ); - m_pImp->m_aScaleHeight = Fraction( aScaledArea.GetHeight(), aNewSize.Height() ); + m_xImp->m_aObjArea.SetSize( aNewSize ); + m_xImp->m_aScaleWidth = Fraction( aScaledArea.GetWidth(), aNewSize.Width() ); + m_xImp->m_aScaleHeight = Fraction( aScaledArea.GetHeight(), aNewSize.Height() ); } } catch (uno::Exception const& e) @@ -990,10 +988,10 @@ ErrCode SfxInPlaceClient::DoVerb( long nVerb ) void SfxInPlaceClient::VisAreaChanged() { - uno::Reference < embed::XInplaceObject > xObj( m_pImp->m_xObject, uno::UNO_QUERY ); - uno::Reference < embed::XInplaceClient > xClient( m_pImp->m_xClient, uno::UNO_QUERY ); + uno::Reference < embed::XInplaceObject > xObj( m_xImp->m_xObject, uno::UNO_QUERY ); + uno::Reference < embed::XInplaceClient > xClient( m_xImp->m_xClient, uno::UNO_QUERY ); if ( xObj.is() && xClient.is() ) - m_pImp->SizeHasChanged(); + m_xImp->SizeHasChanged(); } void SfxInPlaceClient::ObjectAreaChanged() @@ -1022,9 +1020,9 @@ void SfxInPlaceClient::DeactivateObject() { try { - m_pImp->m_bUIActive = false; + m_xImp->m_bUIActive = false; bool bHasFocus = false; - uno::Reference< frame::XModel > xModel( m_pImp->m_xObject->getComponent(), uno::UNO_QUERY ); + uno::Reference< frame::XModel > xModel( m_xImp->m_xObject->getComponent(), uno::UNO_QUERY ); if ( xModel.is() ) { uno::Reference< frame::XController > xController = xModel->getCurrentController(); @@ -1037,21 +1035,21 @@ void SfxInPlaceClient::DeactivateObject() m_pViewSh->GetViewFrame()->GetFrame().LockResize_Impl(true); - if ( (m_pImp->m_xObject->getStatus( m_pImp->m_nAspect ) & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE) || - svt::EmbeddedObjectRef::IsGLChart(m_pImp->m_xObject) ) + if ( (m_xImp->m_xObject->getStatus( m_xImp->m_nAspect ) & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE) || + svt::EmbeddedObjectRef::IsGLChart(m_xImp->m_xObject) ) { - m_pImp->m_xObject->changeState( embed::EmbedStates::INPLACE_ACTIVE ); + m_xImp->m_xObject->changeState( embed::EmbedStates::INPLACE_ACTIVE ); if (bHasFocus) m_pViewSh->GetWindow()->GrabFocus(); } else { // the links should not stay in running state for long time because of locking - uno::Reference< embed::XLinkageSupport > xLink( m_pImp->m_xObject, uno::UNO_QUERY ); + uno::Reference< embed::XLinkageSupport > xLink( m_xImp->m_xObject, uno::UNO_QUERY ); if ( xLink.is() && xLink->isLink() ) - m_pImp->m_xObject->changeState( embed::EmbedStates::LOADED ); + m_xImp->m_xObject->changeState( embed::EmbedStates::LOADED ); else - m_pImp->m_xObject->changeState( embed::EmbedStates::RUNNING ); + m_xImp->m_xObject->changeState( embed::EmbedStates::RUNNING ); } SfxViewFrame* pFrame = m_pViewSh->GetViewFrame(); @@ -1070,18 +1068,18 @@ void SfxInPlaceClient::ResetObject() { try { - m_pImp->m_bUIActive = false; - if ( (m_pImp->m_xObject->getStatus( m_pImp->m_nAspect ) & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE) || - svt::EmbeddedObjectRef::IsGLChart(m_pImp->m_xObject) ) - m_pImp->m_xObject->changeState( embed::EmbedStates::INPLACE_ACTIVE ); + m_xImp->m_bUIActive = false; + if ( (m_xImp->m_xObject->getStatus( m_xImp->m_nAspect ) & embed::EmbedMisc::MS_EMBED_ACTIVATEWHENVISIBLE) || + svt::EmbeddedObjectRef::IsGLChart(m_xImp->m_xObject) ) + m_xImp->m_xObject->changeState( embed::EmbedStates::INPLACE_ACTIVE ); else { // the links should not stay in running state for long time because of locking - uno::Reference< embed::XLinkageSupport > xLink( m_pImp->m_xObject, uno::UNO_QUERY ); + uno::Reference< embed::XLinkageSupport > xLink( m_xImp->m_xObject, uno::UNO_QUERY ); if ( xLink.is() && xLink->isLink() ) - m_pImp->m_xObject->changeState( embed::EmbedStates::LOADED ); + m_xImp->m_xObject->changeState( embed::EmbedStates::LOADED ); else - m_pImp->m_xObject->changeState( embed::EmbedStates::RUNNING ); + m_xImp->m_xObject->changeState( embed::EmbedStates::RUNNING ); } } catch (css::uno::Exception& ) @@ -1091,7 +1089,7 @@ void SfxInPlaceClient::ResetObject() bool SfxInPlaceClient::IsUIActive() { - return m_pImp->m_bUIActive; + return m_xImp->m_bUIActive; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |