remove some manual ref-counting in forms

Change-Id: I6334dca6e98bfd4531033bec203518ca27f64bc0
Reviewed-on: https://gerrit.libreoffice.org/26049
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
This commit is contained in:
Noel Grandin 2016-06-08 10:31:32 +02:00 committed by Noel Grandin
parent a4e33ce06e
commit 6cd3882bec
6 changed files with 15 additions and 36 deletions

View File

@ -261,11 +261,9 @@ ODatabaseForm::ODatabaseForm(const Reference<XComponentContext>& _rxContext)
,m_aResetListeners( *this, m_aMutex ) ,m_aResetListeners( *this, m_aMutex )
,m_aPropertyBagHelper( *this ) ,m_aPropertyBagHelper( *this )
,m_pAggregatePropertyMultiplexer(nullptr) ,m_pAggregatePropertyMultiplexer(nullptr)
,m_pGroupManager( nullptr )
,m_aParameterManager( m_aMutex, _rxContext ) ,m_aParameterManager( m_aMutex, _rxContext )
,m_aFilterManager() ,m_aFilterManager()
,m_pLoadTimer(nullptr) ,m_pLoadTimer(nullptr)
,m_pThread(nullptr)
,m_nResetsPending(0) ,m_nResetsPending(0)
,m_nPrivileges(0) ,m_nPrivileges(0)
,m_bInsertOnly( false ) ,m_bInsertOnly( false )
@ -299,11 +297,9 @@ ODatabaseForm::ODatabaseForm( const ODatabaseForm& _cloneSource )
,m_aResetListeners( *this, m_aMutex ) ,m_aResetListeners( *this, m_aMutex )
,m_aPropertyBagHelper( *this ) ,m_aPropertyBagHelper( *this )
,m_pAggregatePropertyMultiplexer( nullptr ) ,m_pAggregatePropertyMultiplexer( nullptr )
,m_pGroupManager( nullptr )
,m_aParameterManager( m_aMutex, _cloneSource.m_xContext ) ,m_aParameterManager( m_aMutex, _cloneSource.m_xContext )
,m_aFilterManager() ,m_aFilterManager()
,m_pLoadTimer( nullptr ) ,m_pLoadTimer( nullptr )
,m_pThread( nullptr )
,m_nResetsPending( 0 ) ,m_nResetsPending( 0 )
,m_nPrivileges( 0 ) ,m_nPrivileges( 0 )
,m_bInsertOnly( _cloneSource.m_bInsertOnly ) ,m_bInsertOnly( _cloneSource.m_bInsertOnly )
@ -423,15 +419,12 @@ void ODatabaseForm::impl_construct()
osl_atomic_decrement( &m_refCount ); osl_atomic_decrement( &m_refCount );
m_pGroupManager = new OGroupManager( this ); m_pGroupManager = new OGroupManager( this );
m_pGroupManager->acquire();
} }
ODatabaseForm::~ODatabaseForm() ODatabaseForm::~ODatabaseForm()
{ {
m_pGroupManager.clear();
m_pGroupManager->release();
m_pGroupManager = nullptr;
if (m_xAggregate.is()) if (m_xAggregate.is())
m_xAggregate->setDelegator( nullptr ); m_xAggregate->setDelegator( nullptr );
@ -1281,11 +1274,7 @@ void ODatabaseForm::disposing()
// cancel the submit/reset-thread // cancel the submit/reset-thread
{ {
::osl::MutexGuard aGuard( m_aMutex ); ::osl::MutexGuard aGuard( m_aMutex );
if (m_pThread) m_pThread.clear();
{
m_pThread->release();
m_pThread = nullptr;
}
} }
EventObject aEvt(static_cast<XWeak*>(this)); EventObject aEvt(static_cast<XWeak*>(this));
@ -1937,10 +1926,9 @@ void SAL_CALL ODatabaseForm::reset() throw( RuntimeException, std::exception )
++m_nResetsPending; ++m_nResetsPending;
// create an own thread if we have (approve-)reset-listeners (so the listeners can't do that much damage // create an own thread if we have (approve-)reset-listeners (so the listeners can't do that much damage
// to this thread which is probably the main one) // to this thread which is probably the main one)
if (!m_pThread) if (!m_pThread.is())
{ {
m_pThread = new OFormSubmitResetThread(this); m_pThread = new OFormSubmitResetThread(this);
m_pThread->acquire();
m_pThread->create(); m_pThread->create();
} }
EventObject aEvt; EventObject aEvt;
@ -2108,10 +2096,9 @@ void SAL_CALL ODatabaseForm::submit( const Reference<XControl>& Control,
{ {
// create an own thread if we have (approve-)submit-listeners (so the listeners can't do that much damage // create an own thread if we have (approve-)submit-listeners (so the listeners can't do that much damage
// to this thread which is probably the main one) // to this thread which is probably the main one)
if (!m_pThread) if (!m_pThread.is())
{ {
m_pThread = new OFormSubmitResetThread(this); m_pThread = new OFormSubmitResetThread(this);
m_pThread->acquire();
m_pThread->create(); m_pThread->create();
} }
m_pThread->addEvent(&MouseEvt, Control, true); m_pThread->addEvent(&MouseEvt, Control, true);

View File

@ -175,12 +175,12 @@ class ODatabaseForm :public OFormComponents
::dbtools::WarningsContainer m_aWarnings; ::dbtools::WarningsContainer m_aWarnings;
OPropertyChangeMultiplexer* m_pAggregatePropertyMultiplexer; OPropertyChangeMultiplexer* m_pAggregatePropertyMultiplexer;
// Management of the Control Groups // Management of the Control Groups
OGroupManager* m_pGroupManager; rtl::Reference<OGroupManager> m_pGroupManager;
::dbtools::ParameterManager m_aParameterManager; ::dbtools::ParameterManager m_aParameterManager;
::dbtools::FilterManager m_aFilterManager; ::dbtools::FilterManager m_aFilterManager;
Timer* m_pLoadTimer; Timer* m_pLoadTimer;
OFormSubmitResetThread* m_pThread; rtl::Reference<OFormSubmitResetThread> m_pThread;
OUString m_sCurrentErrorContext; OUString m_sCurrentErrorContext;
// will be used as additional context information // will be used as additional context information
// when an exception is catched and forwarded to the listeners // when an exception is catched and forwarded to the listeners

View File

@ -83,7 +83,6 @@ namespace frm
OClickableImageBaseControl::OClickableImageBaseControl(const Reference<XComponentContext>& _rxFactory, const OUString& _aService) OClickableImageBaseControl::OClickableImageBaseControl(const Reference<XComponentContext>& _rxFactory, const OUString& _aService)
:OControl(_rxFactory, _aService) :OControl(_rxFactory, _aService)
,m_pThread(nullptr)
,m_aSubmissionVetoListeners( m_aMutex ) ,m_aSubmissionVetoListeners( m_aMutex )
,m_aApproveActionListeners( m_aMutex ) ,m_aApproveActionListeners( m_aMutex )
,m_aActionListeners( m_aMutex ) ,m_aActionListeners( m_aMutex )
@ -150,11 +149,7 @@ namespace frm
{ {
::osl::MutexGuard aGuard( m_aMutex ); ::osl::MutexGuard aGuard( m_aMutex );
if( m_pThread ) m_pThread.clear();
{
m_pThread->release();
m_pThread = nullptr;
}
} }
OControl::disposing(); OControl::disposing();
@ -163,13 +158,12 @@ namespace frm
OImageProducerThread_Impl* OClickableImageBaseControl::getImageProducerThread() OImageProducerThread_Impl* OClickableImageBaseControl::getImageProducerThread()
{ {
if ( !m_pThread ) if ( !m_pThread.is() )
{ {
m_pThread = new OImageProducerThread_Impl( this ); m_pThread = new OImageProducerThread_Impl( this );
m_pThread->acquire();
m_pThread->create(); m_pThread->create();
} }
return m_pThread; return m_pThread.get();
} }

View File

@ -187,10 +187,10 @@ namespace frm
friend class OImageProducerThread_Impl; friend class OImageProducerThread_Impl;
private: private:
OImageProducerThread_Impl* m_pThread; rtl::Reference<OImageProducerThread_Impl> m_pThread;
::comphelper::OInterfaceContainerHelper2 m_aSubmissionVetoListeners; ::comphelper::OInterfaceContainerHelper2 m_aSubmissionVetoListeners;
::std::unique_ptr< ControlFeatureInterception > ::std::unique_ptr< ControlFeatureInterception >
m_pFeatureInterception; m_pFeatureInterception;
protected: protected:
::comphelper::OInterfaceContainerHelper2 m_aApproveActionListeners; ::comphelper::OInterfaceContainerHelper2 m_aApproveActionListeners;

View File

@ -130,11 +130,9 @@ namespace frm
OPasteClipboardDispatcher::OPasteClipboardDispatcher( EditView& _rView ) OPasteClipboardDispatcher::OPasteClipboardDispatcher( EditView& _rView )
:OClipboardDispatcher( _rView, ePaste ) :OClipboardDispatcher( _rView, ePaste )
,m_pClipListener( nullptr )
,m_bPastePossible( false ) ,m_bPastePossible( false )
{ {
m_pClipListener = new TransferableClipboardListener( LINK( this, OPasteClipboardDispatcher, OnClipboardChanged ) ); m_pClipListener = new TransferableClipboardListener( LINK( this, OPasteClipboardDispatcher, OnClipboardChanged ) );
m_pClipListener->acquire();
m_pClipListener->AddListener( _rView.GetWindow() ); m_pClipListener->AddListener( _rView.GetWindow() );
// initial state // initial state
@ -166,13 +164,12 @@ namespace frm
void OPasteClipboardDispatcher::disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify ) void OPasteClipboardDispatcher::disposing( ::osl::ClearableMutexGuard& _rClearBeforeNotify )
{ {
OSL_ENSURE( getEditView() && getEditView()->GetWindow(), "OPasteClipboardDispatcher::disposing: EditView should not (yet) be disfunctional here!" ); OSL_ENSURE( getEditView() && getEditView()->GetWindow(), "OPasteClipboardDispatcher::disposing: EditView should not (yet) be disfunctional here!" );
if (m_pClipListener) if (m_pClipListener.is())
{ {
if (getEditView() && getEditView()->GetWindow()) if (getEditView() && getEditView()->GetWindow())
m_pClipListener->RemoveListener( getEditView()->GetWindow() ); m_pClipListener->RemoveListener( getEditView()->GetWindow() );
m_pClipListener->release(); m_pClipListener.clear();
m_pClipListener = nullptr;
} }
OClipboardDispatcher::disposing( _rClearBeforeNotify ); OClipboardDispatcher::disposing( _rClearBeforeNotify );

View File

@ -22,6 +22,7 @@
#include "featuredispatcher.hxx" #include "featuredispatcher.hxx"
#include <tools/link.hxx> #include <tools/link.hxx>
#include <rtl/ref.hxx>
class TransferableClipboardListener; class TransferableClipboardListener;
class TransferableDataHelper; class TransferableDataHelper;
@ -65,7 +66,7 @@ namespace frm
class OPasteClipboardDispatcher : public OClipboardDispatcher class OPasteClipboardDispatcher : public OClipboardDispatcher
{ {
private: private:
TransferableClipboardListener* m_pClipListener; rtl::Reference<TransferableClipboardListener> m_pClipListener;
bool m_bPastePossible; bool m_bPastePossible;
public: public: