diff options
author | Xisco Fauli <anistenis@gmail.com> | 2016-06-15 20:46:16 +0200 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2016-06-21 13:18:04 +0000 |
commit | bb6500aa74feabcf884801d7ca9ce70b5449cafb (patch) | |
tree | 5c95f163c3690dc9e9643ca044726c6c6fad2462 /svtools | |
parent | 9cef658364e4d8441f490e4fe89c3bfa14cd24b3 (diff) |
tdf#89329: use shared_ptr for pImpl in slidesorterbaropt
Change-Id: If5b7fd23448a584d1faebaf0a540e61f091471fa
Reviewed-on: https://gerrit.libreoffice.org/26331
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/config/slidesorterbaropt.cxx | 58 |
1 files changed, 26 insertions, 32 deletions
diff --git a/svtools/source/config/slidesorterbaropt.cxx b/svtools/source/config/slidesorterbaropt.cxx index 49607c03e724..00028af7eed8 100644 --- a/svtools/source/config/slidesorterbaropt.cxx +++ b/svtools/source/config/slidesorterbaropt.cxx @@ -55,7 +55,7 @@ class SvtSlideSorterBarOptions_Impl : public ConfigItem public: SvtSlideSorterBarOptions_Impl(); - virtual ~SvtSlideSorterBarOptions_Impl(); + ~SvtSlideSorterBarOptions_Impl() override; /** called for notify of configmanager @@ -83,7 +83,7 @@ class SvtSlideSorterBarOptions_Impl : public ConfigItem bool m_bVisibleDrawView; private: - virtual void ImplCommit() override; + virtual void ImplCommit() final override; /** return list of key names of our configuration management which represent oue module tree @@ -193,7 +193,8 @@ SvtSlideSorterBarOptions_Impl::SvtSlideSorterBarOptions_Impl() SvtSlideSorterBarOptions_Impl::~SvtSlideSorterBarOptions_Impl() { - assert(!IsModified()); // should have been committed + if (IsModified()) + Commit(); } static int lcl_MapPropertyName( const OUString& rCompare, @@ -343,20 +344,20 @@ void SvtSlideSorterBarOptions_Impl::SetVisibleViewImpl( bool& bVisibleView, bool } } -// initialize static member, see definition for further information -// DON'T DO IT IN YOUR HEADER! -SvtSlideSorterBarOptions_Impl* SvtSlideSorterBarOptions::m_pDataContainer = nullptr ; -sal_Int32 SvtSlideSorterBarOptions::m_nRefCount = 0 ; +namespace { + std::weak_ptr<SvtSlideSorterBarOptions_Impl> g_pSlideSorterBarOptions; +} SvtSlideSorterBarOptions::SvtSlideSorterBarOptions() { // 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 = g_pSlideSorterBarOptions.lock(); + if( !m_pImpl ) { - m_pDataContainer = new SvtSlideSorterBarOptions_Impl; + m_pImpl = std::make_shared<SvtSlideSorterBarOptions_Impl>(); + g_pSlideSorterBarOptions = m_pImpl; } } @@ -364,75 +365,68 @@ SvtSlideSorterBarOptions::~SvtSlideSorterBarOptions() { // 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 ) - { - if (m_pDataContainer->IsModified()) - m_pDataContainer->Commit(); - delete m_pDataContainer; - m_pDataContainer = nullptr; - } + + m_pImpl.reset(); } bool SvtSlideSorterBarOptions::GetVisibleImpressView() const { - return m_pDataContainer->m_bVisibleImpressView && !comphelper::LibreOfficeKit::isActive(); + return m_pImpl->m_bVisibleImpressView && !comphelper::LibreOfficeKit::isActive(); } void SvtSlideSorterBarOptions::SetVisibleImpressView(bool bVisible) { - m_pDataContainer->SetVisibleImpressView( bVisible ); + m_pImpl->SetVisibleImpressView( bVisible ); } bool SvtSlideSorterBarOptions::GetVisibleOutlineView() const { - return m_pDataContainer->m_bVisibleOutlineView; + return m_pImpl->m_bVisibleOutlineView; } void SvtSlideSorterBarOptions::SetVisibleOutlineView(bool bVisible) { - m_pDataContainer->SetVisibleOutlineView( bVisible ); + m_pImpl->SetVisibleOutlineView( bVisible ); } bool SvtSlideSorterBarOptions::GetVisibleNotesView() const { - return m_pDataContainer->m_bVisibleNotesView; + return m_pImpl->m_bVisibleNotesView; } void SvtSlideSorterBarOptions::SetVisibleNotesView(bool bVisible) { - m_pDataContainer->SetVisibleNotesView( bVisible ); + m_pImpl->SetVisibleNotesView( bVisible ); } bool SvtSlideSorterBarOptions::GetVisibleHandoutView() const { - return m_pDataContainer->m_bVisibleHandoutView; + return m_pImpl->m_bVisibleHandoutView; } void SvtSlideSorterBarOptions::SetVisibleHandoutView(bool bVisible) { - m_pDataContainer->SetVisibleHandoutView( bVisible ); + m_pImpl->SetVisibleHandoutView( bVisible ); } bool SvtSlideSorterBarOptions::GetVisibleSlideSorterView() const { - return m_pDataContainer->m_bVisibleSlideSorterView && !comphelper::LibreOfficeKit::isActive(); + return m_pImpl->m_bVisibleSlideSorterView && !comphelper::LibreOfficeKit::isActive(); } void SvtSlideSorterBarOptions::SetVisibleSlideSorterView(bool bVisible) { - m_pDataContainer->SetVisibleSlideSorterView( bVisible ); + m_pImpl->SetVisibleSlideSorterView( bVisible ); } bool SvtSlideSorterBarOptions::GetVisibleDrawView() const { - return m_pDataContainer->m_bVisibleDrawView; + return m_pImpl->m_bVisibleDrawView; } void SvtSlideSorterBarOptions::SetVisibleDrawView(bool bVisible) { - m_pDataContainer->SetVisibleDrawView( bVisible ); + m_pImpl->SetVisibleDrawView( bVisible ); } namespace |