diff options
author | Xisco Fauli <anistenis@gmail.com> | 2016-06-15 01:20:36 +0200 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2016-06-16 06:53:06 +0000 |
commit | dad8d71f4a73b64e534c1977e09e54905b8e27e8 (patch) | |
tree | 06b617112f58334b74db4c6679be1a0c7e0e9df2 /svtools | |
parent | 94d2b31d984382ba76c623236f6daf678204844a (diff) |
tdf#89329: use shared_ptr for pImpl in toolpanelopt
Change-Id: I2035971f6633aed1389ffae5815c7000699b9735
Reviewed-on: https://gerrit.libreoffice.org/26279
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/config/toolpanelopt.cxx | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/svtools/source/config/toolpanelopt.cxx b/svtools/source/config/toolpanelopt.cxx index bddf81d75c82..5294886095fe 100644 --- a/svtools/source/config/toolpanelopt.cxx +++ b/svtools/source/config/toolpanelopt.cxx @@ -297,20 +297,18 @@ Sequence< OUString > SvtToolPanelOptions_Impl::GetPropertyNames() return Sequence< OUString >( pProperties, SAL_N_ELEMENTS( pProperties ) ); } -// initialize static member, see definition for further information -// DON'T DO IT IN YOUR HEADER! -SvtToolPanelOptions_Impl* SvtToolPanelOptions::m_pDataContainer = nullptr; -sal_Int32 SvtToolPanelOptions::m_nRefCount = 0; +std::weak_ptr<SvtToolPanelOptions_Impl> m_pOptions; SvtToolPanelOptions::SvtToolPanelOptions() { // Global access, must be guarded (multithreading!). MutexGuard aGuard( GetInitMutex() ); - ++m_nRefCount; - // ... and initialize our data container only if it not already exist! - if( m_pDataContainer == nullptr ) + + m_pImpl = m_pOptions.lock(); + if( !m_pImpl ) { - m_pDataContainer = new SvtToolPanelOptions_Impl; + m_pImpl = std::make_shared<SvtToolPanelOptions_Impl>(); + m_pOptions = m_pImpl; } } @@ -318,63 +316,58 @@ SvtToolPanelOptions::~SvtToolPanelOptions() { // Global access, must be guarded (multithreading!) MutexGuard aGuard( GetInitMutex() ); - --m_nRefCount; - // If last instance was deleted we must destroy our static data container! - if( m_nRefCount <= 0 ) - { - delete m_pDataContainer; - m_pDataContainer = nullptr; - } + + m_pImpl.reset(); } bool SvtToolPanelOptions::GetVisibleImpressView() const { - return m_pDataContainer->m_bVisibleImpressView; + return m_pImpl->m_bVisibleImpressView; } void SvtToolPanelOptions::SetVisibleImpressView(bool bVisible) { - m_pDataContainer->m_bVisibleImpressView = bVisible; + m_pImpl->m_bVisibleImpressView = bVisible; } bool SvtToolPanelOptions::GetVisibleOutlineView() const { - return m_pDataContainer->m_bVisibleOutlineView; + return m_pImpl->m_bVisibleOutlineView; } void SvtToolPanelOptions::SetVisibleOutlineView(bool bVisible) { - m_pDataContainer->m_bVisibleOutlineView = bVisible; + m_pImpl->m_bVisibleOutlineView = bVisible; } bool SvtToolPanelOptions::GetVisibleNotesView() const { - return m_pDataContainer->m_bVisibleNotesView; + return m_pImpl->m_bVisibleNotesView; } void SvtToolPanelOptions::SetVisibleNotesView(bool bVisible) { - m_pDataContainer->m_bVisibleNotesView = bVisible; + m_pImpl->m_bVisibleNotesView = bVisible; } bool SvtToolPanelOptions::GetVisibleHandoutView() const { - return m_pDataContainer->m_bVisibleHandoutView; + return m_pImpl->m_bVisibleHandoutView; } void SvtToolPanelOptions::SetVisibleHandoutView(bool bVisible) { - m_pDataContainer->m_bVisibleHandoutView = bVisible; + m_pImpl->m_bVisibleHandoutView = bVisible; } bool SvtToolPanelOptions::GetVisibleSlideSorterView() const { - return m_pDataContainer->m_bVisibleSlideSorterView; + return m_pImpl->m_bVisibleSlideSorterView; } void SvtToolPanelOptions::SetVisibleSlideSorterView(bool bVisible) { - m_pDataContainer->m_bVisibleSlideSorterView = bVisible; + m_pImpl->m_bVisibleSlideSorterView = bVisible; } namespace |