summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXisco Fauli <anistenis@gmail.com>2016-06-15 20:41:11 +0200
committerNoel Grandin <noelgrandin@gmail.com>2016-06-16 06:40:55 +0000
commitf698ddfeffda7391965b7bb8b488420332ac37bf (patch)
tree347dec01300b4416d0481fb7be4104a8f0555867
parentc0d9642b4df485c32350cdc7a16084a2eac2cbf7 (diff)
tdf#89329: use shared_ptr for pImpl in miscopt
Change-Id: I7c60116d4f14e1451e7b96568104baada01dfaca Reviewed-on: https://gerrit.libreoffice.org/26330 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
-rw-r--r--include/svtools/miscopt.hxx24
-rw-r--r--svtools/source/config/miscopt.cxx86
2 files changed, 34 insertions, 76 deletions
diff --git a/include/svtools/miscopt.hxx b/include/svtools/miscopt.hxx
index 31b745fb92f3..80835a9058e7 100644
--- a/include/svtools/miscopt.hxx
+++ b/include/svtools/miscopt.hxx
@@ -25,6 +25,7 @@
#include <osl/mutex.hxx>
#include <rtl/ustring.hxx>
#include <unotools/options.hxx>
+#include <memory>
/*-************************************************************************************************************
@short forward declaration to our private date container implementation
@@ -45,17 +46,6 @@ class SvtMiscOptions_Impl;
class SVT_DLLPUBLIC SvtMiscOptions: public utl::detail::Options
{
public:
- /*-****************************************************************************************************
- @short standard constructor and destructor
- @descr 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 ...
-
- @seealso member m_nRefCount
- @seealso member m_pDataContainer
- *//*-*****************************************************************************************************/
-
SvtMiscOptions();
virtual ~SvtMiscOptions();
@@ -108,17 +98,7 @@ class SVT_DLLPUBLIC SvtMiscOptions: public utl::detail::Options
SVT_DLLPRIVATE static ::osl::Mutex& GetInitMutex();
private:
-
- /*Attention
-
- Don't initialize these static members in these headers!
- a) Double defined symbols will be detected ...
- b) and unresolved externals exist at linking time.
- Do it in your source only.
- */
-
- static SvtMiscOptions_Impl* m_pDataContainer ;
- static sal_Int32 m_nRefCount ;
+ std::shared_ptr<SvtMiscOptions_Impl> m_pImpl;
}; // class SvtMiscOptions
diff --git a/svtools/source/config/miscopt.cxx b/svtools/source/config/miscopt.cxx
index 1210883049d5..e0ecfd82f1b4 100644
--- a/svtools/source/config/miscopt.cxx
+++ b/svtools/source/config/miscopt.cxx
@@ -643,85 +643,63 @@ Sequence< OUString > SvtMiscOptions_Impl::GetPropertyNames()
return seqPropertyNames;
}
-
-// initialize static member
-// DON'T DO IT IN YOUR HEADER!
-// see definition for further information
-
-SvtMiscOptions_Impl* SvtMiscOptions::m_pDataContainer = nullptr ;
-sal_Int32 SvtMiscOptions::m_nRefCount = 0 ;
-
-
-// constructor
+std::weak_ptr<SvtMiscOptions_Impl> m_pMiscOptions;
SvtMiscOptions::SvtMiscOptions()
{
- // SvtMiscOptions_Impl ctor indirectly calls code that requires locked
- // SolarMutex; lock it first:
- SolarMutexGuard g;
// Global access, must be guarded (multithreading!).
MutexGuard aGuard( GetInitMutex() );
- // Increase our refcount ...
- ++m_nRefCount;
- // ... and initialize our data container only if it not already exist!
- if( m_pDataContainer == nullptr )
+
+ m_pImpl = m_pMiscOptions.lock();
+ if( !m_pImpl )
{
- m_pDataContainer = new SvtMiscOptions_Impl;
- svtools::ItemHolder2::holdConfigItem(E_MISCOPTIONS);
+ m_pImpl = std::make_shared<SvtMiscOptions_Impl>();
+ m_pMiscOptions = m_pImpl;
+ svtools::ItemHolder2::holdConfigItem(E_MISCOPTIONS);
}
}
-
-// destructor
-
SvtMiscOptions::~SvtMiscOptions()
{
// Global access, must be guarded (multithreading!)
MutexGuard aGuard( GetInitMutex() );
- // Decrease our refcount.
- --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 SvtMiscOptions::UseSystemFileDialog() const
{
- return m_pDataContainer->UseSystemFileDialog();
+ return m_pImpl->UseSystemFileDialog();
}
void SvtMiscOptions::SetUseSystemFileDialog( bool bEnable )
{
- m_pDataContainer->SetUseSystemFileDialog( bEnable );
+ m_pImpl->SetUseSystemFileDialog( bEnable );
}
bool SvtMiscOptions::IsUseSystemFileDialogReadOnly() const
{
- return m_pDataContainer->IsUseSystemFileDialogReadOnly();
+ return m_pImpl->IsUseSystemFileDialogReadOnly();
}
bool SvtMiscOptions::IsPluginsEnabled() const
{
- return m_pDataContainer->IsPluginsEnabled();
+ return m_pImpl->IsPluginsEnabled();
}
sal_Int16 SvtMiscOptions::GetSymbolsSize() const
{
- return m_pDataContainer->GetSymbolsSize();
+ return m_pImpl->GetSymbolsSize();
}
void SvtMiscOptions::SetSymbolsSize( sal_Int16 nSet )
{
- m_pDataContainer->SetSymbolsSize( nSet );
+ m_pImpl->SetSymbolsSize( nSet );
}
sal_Int16 SvtMiscOptions::GetCurrentSymbolsSize() const
{
- sal_Int16 eOptSymbolsSize = m_pDataContainer->GetSymbolsSize();
+ sal_Int16 eOptSymbolsSize = m_pImpl->GetSymbolsSize();
if ( eOptSymbolsSize == SFX_SYMBOLS_SIZE_AUTO )
{
@@ -749,67 +727,67 @@ OUString SvtMiscOptions::GetIconTheme() const
void SvtMiscOptions::SetIconTheme(const OUString& iconTheme)
{
- m_pDataContainer->SetIconTheme(iconTheme);
+ m_pImpl->SetIconTheme(iconTheme);
}
bool SvtMiscOptions::DisableUICustomization() const
{
- return m_pDataContainer->DisableUICustomization();
+ return m_pImpl->DisableUICustomization();
}
sal_Int16 SvtMiscOptions::GetToolboxStyle() const
{
- return m_pDataContainer->GetToolboxStyle();
+ return m_pImpl->GetToolboxStyle();
}
void SvtMiscOptions::SetToolboxStyle( sal_Int16 nStyle )
{
- m_pDataContainer->SetToolboxStyle( nStyle );
+ m_pImpl->SetToolboxStyle( nStyle );
}
bool SvtMiscOptions::UseSystemPrintDialog() const
{
- return m_pDataContainer->UseSystemPrintDialog();
+ return m_pImpl->UseSystemPrintDialog();
}
void SvtMiscOptions::SetUseSystemPrintDialog( bool bEnable )
{
- m_pDataContainer->SetUseSystemPrintDialog( bEnable );
+ m_pImpl->SetUseSystemPrintDialog( bEnable );
}
bool SvtMiscOptions::ShowLinkWarningDialog() const
{
- return m_pDataContainer->ShowLinkWarningDialog();
+ return m_pImpl->ShowLinkWarningDialog();
}
void SvtMiscOptions::SetShowLinkWarningDialog( bool bSet )
{
- m_pDataContainer->SetShowLinkWarningDialog( bSet );
+ m_pImpl->SetShowLinkWarningDialog( bSet );
}
bool SvtMiscOptions::IsShowLinkWarningDialogReadOnly() const
{
- return m_pDataContainer->IsShowLinkWarningDialogReadOnly();
+ return m_pImpl->IsShowLinkWarningDialogReadOnly();
}
void SvtMiscOptions::SetExperimentalMode( bool bSet )
{
- m_pDataContainer->SetExperimentalMode( bSet );
+ m_pImpl->SetExperimentalMode( bSet );
}
bool SvtMiscOptions::IsExperimentalMode() const
{
- return m_pDataContainer->IsExperimentalMode();
+ return m_pImpl->IsExperimentalMode();
}
void SvtMiscOptions::SetMacroRecorderMode( bool bSet )
{
- m_pDataContainer->SetMacroRecorderMode( bSet );
+ m_pImpl->SetMacroRecorderMode( bSet );
}
bool SvtMiscOptions::IsMacroRecorderMode() const
{
- return m_pDataContainer->IsMacroRecorderMode();
+ return m_pImpl->IsMacroRecorderMode();
}
namespace
@@ -825,18 +803,18 @@ Mutex & SvtMiscOptions::GetInitMutex()
void SvtMiscOptions::AddListenerLink( const Link<LinkParamNone*,void>& rLink )
{
- m_pDataContainer->AddListenerLink( rLink );
+ m_pImpl->AddListenerLink( rLink );
}
void SvtMiscOptions::RemoveListenerLink( const Link<LinkParamNone*,void>& rLink )
{
- m_pDataContainer->RemoveListenerLink( rLink );
+ m_pImpl->RemoveListenerLink( rLink );
}
bool
SvtMiscOptions::IconThemeWasSetAutomatically()
{
- return m_pDataContainer->IconThemeWasSetAutomatically();
+ return m_pImpl->IconThemeWasSetAutomatically();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */