summaryrefslogtreecommitdiff
path: root/sd/source/ui/tools/SdGlobalResourceContainer.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/tools/SdGlobalResourceContainer.cxx')
-rw-r--r--sd/source/ui/tools/SdGlobalResourceContainer.cxx41
1 files changed, 28 insertions, 13 deletions
diff --git a/sd/source/ui/tools/SdGlobalResourceContainer.cxx b/sd/source/ui/tools/SdGlobalResourceContainer.cxx
index a7f0d54cac34..14653553ec67 100644
--- a/sd/source/ui/tools/SdGlobalResourceContainer.cxx
+++ b/sd/source/ui/tools/SdGlobalResourceContainer.cxx
@@ -19,6 +19,13 @@
#include "tools/SdGlobalResourceContainer.hxx"
+#include <comphelper/processfactory.hxx>
+#include <comphelper/unique_disposing_ptr.hxx>
+
+#include <com/sun/star/frame/Desktop.hpp>
+
+#include <rtl/instance.hxx>
+
#include <algorithm>
#include <vector>
@@ -27,13 +34,30 @@ using namespace ::com::sun::star::uno;
namespace sd {
+class SdGlobalResourceContainerInstance
+ : public comphelper::unique_disposing_solar_mutex_reset_ptr<SdGlobalResourceContainer>
+{
+public:
+ SdGlobalResourceContainerInstance()
+ : comphelper::unique_disposing_solar_mutex_reset_ptr<SdGlobalResourceContainer>(
+ uno::Reference<lang::XComponent>(frame::Desktop::create(comphelper::getProcessComponentContext()), uno::UNO_QUERY_THROW),
+ new SdGlobalResourceContainer, true)
+ {
+ }
+};
+
+namespace {
+
+struct theSdGlobalResourceContainerInstance : public rtl::Static<SdGlobalResourceContainerInstance, theSdGlobalResourceContainerInstance> {};
+
+} // namespace
+
//===== SdGlobalResourceContainer::Implementation =============================
class SdGlobalResourceContainer::Implementation
{
private:
friend class SdGlobalResourceContainer;
- static SdGlobalResourceContainer* mpInstance;
::osl::Mutex maMutex;
@@ -53,15 +77,11 @@ private:
// static
SdGlobalResourceContainer& SdGlobalResourceContainer::Instance()
{
- DBG_ASSERT(Implementation::mpInstance!=nullptr,
- "SdGlobalResourceContainer::Instance(): instance has been deleted");
- // Maybe we should throw an exception when the instance has been deleted.
- return *Implementation::mpInstance;
+ SdGlobalResourceContainer *const pRet(theSdGlobalResourceContainerInstance::get().get());
+ assert(pRet); // error if it has been deleted and is null
+ return *pRet;
}
-SdGlobalResourceContainer*
- SdGlobalResourceContainer::Implementation::mpInstance = nullptr;
-
//===== SdGlobalResourceContainer =============================================
void SdGlobalResourceContainer::AddResource (
@@ -128,7 +148,6 @@ void SdGlobalResourceContainer::AddResource (const Reference<XInterface>& rxReso
SdGlobalResourceContainer::SdGlobalResourceContainer()
: mpImpl (new SdGlobalResourceContainer::Implementation())
{
- Implementation::mpInstance = this;
}
SdGlobalResourceContainer::~SdGlobalResourceContainer()
@@ -174,10 +193,6 @@ SdGlobalResourceContainer::~SdGlobalResourceContainer()
if (xComponent.is())
xComponent->dispose();
}
-
- DBG_ASSERT(Implementation::mpInstance == this,
- "~SdGlobalResourceContainer(): more than one instance of singleton");
- Implementation::mpInstance = nullptr;
}
} // end of namespace sd