[Libreoffice-commits] core.git: include/svtools svtools/source
Xisco Fauli
anistenis at gmail.com
Tue Jun 21 13:18:26 UTC 2016
include/svtools/slidesorterbaropt.hxx | 23 -----------
svtools/source/config/slidesorterbaropt.cxx | 58 ++++++++++++----------------
2 files changed, 28 insertions(+), 53 deletions(-)
New commits:
commit bb6500aa74feabcf884801d7ca9ce70b5449cafb
Author: Xisco Fauli <anistenis at gmail.com>
Date: Wed Jun 15 20:46:16 2016 +0200
tdf#89329: use shared_ptr for pImpl in slidesorterbaropt
Change-Id: If5b7fd23448a584d1faebaf0a540e61f091471fa
Reviewed-on: https://gerrit.libreoffice.org/26331
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin at gmail.com>
diff --git a/include/svtools/slidesorterbaropt.hxx b/include/svtools/slidesorterbaropt.hxx
index e436fe6..d92dd58 100644
--- a/include/svtools/slidesorterbaropt.hxx
+++ b/include/svtools/slidesorterbaropt.hxx
@@ -25,6 +25,7 @@
#include <osl/mutex.hxx>
#include <rtl/ustring.hxx>
#include <unotools/options.hxx>
+#include <memory>
/** forward declaration to our private date container implementation
@@ -41,16 +42,6 @@ class SvtSlideSorterBarOptions_Impl;
class SVT_DLLPUBLIC SvtSlideSorterBarOptions: public utl::detail::Options
{
public:
- /** standard constructor and destructor
-
- This will initialize an instance with default values.
- We implement these class with a refcount mechanism! Every instance of this class increase it
- at create and decrease it at delete time - but all instances use the same data container!
- He is implemented as a static member ...
-
- \sa member m_nRefCount
- \sa member m_pDataContainer
- */
SvtSlideSorterBarOptions();
virtual ~SvtSlideSorterBarOptions();
@@ -79,17 +70,7 @@ class SVT_DLLPUBLIC SvtSlideSorterBarOptions: public utl::detail::Options
SVT_DLLPRIVATE static ::osl::Mutex& GetInitMutex();
private:
-
- /**
- \attention
- Don't initialize these static members in these headers!
- \li Double defined symbols will be detected ...
- \li and unresolved externals exist at linking time.
- Do it in your source only.
- */
- static SvtSlideSorterBarOptions_Impl* m_pDataContainer ;
- static sal_Int32 m_nRefCount ;
-
+ std::shared_ptr<SvtSlideSorterBarOptions_Impl> m_pImpl;
};
#endif
diff --git a/svtools/source/config/slidesorterbaropt.cxx b/svtools/source/config/slidesorterbaropt.cxx
index 49607c0..00028af 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
More information about the Libreoffice-commits
mailing list