diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2016-01-26 18:16:37 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-01-26 18:16:37 +0100 |
commit | ac95e905a12ee6ad49af3814a248d0ddb7700559 (patch) | |
tree | d3f2d97a1c9293d6180bc0fb03d63e9be41bd879 /framework | |
parent | bde86f8074842585e2964b3157e97672fb25e63d (diff) |
Replace salhelper::SingletonRef with rtl::Static
Change-Id: I2ff6462472292de7cdeb5c7ed748299e58399bdb
Diffstat (limited to 'framework')
-rw-r--r-- | framework/source/accelerators/presethandler.cxx | 67 | ||||
-rw-r--r-- | framework/source/inc/accelerators/presethandler.hxx | 35 |
2 files changed, 50 insertions, 52 deletions
diff --git a/framework/source/accelerators/presethandler.cxx b/framework/source/accelerators/presethandler.cxx index 35a417342a81..f9121479aae5 100644 --- a/framework/source/accelerators/presethandler.cxx +++ b/framework/source/accelerators/presethandler.cxx @@ -46,10 +46,40 @@ static const ::sal_Int32 ID_CORRUPT_UICONFIG_GENERAL = 3; namespace framework { +namespace { + +/** @short because a concurrent access to the same storage from different implementations + isn't supported, we have to share it with others. + + @descr This struct is allegedly shared and must be used within a + synchronized section. But it isn't. + */ +struct TSharedStorages +{ + public: + + StorageHolder m_lStoragesShare; + StorageHolder m_lStoragesUser; + + TSharedStorages() + : m_lStoragesShare() + , m_lStoragesUser () + {}; + + virtual ~TSharedStorages() {}; +}; + +/** @short provides access to the: + a) shared root storages + b) shared "inbetween" storages + of the share and user layer. */ +struct SharedStorages: public rtl::Static<TSharedStorages, SharedStorages> {}; + +} + PresetHandler::PresetHandler(const css::uno::Reference< css::uno::XComponentContext >& xContext) : m_xContext(xContext) , m_eConfigType(E_GLOBAL) - , m_aSharedStorages() , m_lDocumentStorages() , m_aLanguageTag(LANGUAGE_USER_PRIV_NOTRANSLATE) { @@ -62,7 +92,6 @@ PresetHandler::PresetHandler(const PresetHandler& rCopy) m_eConfigType = rCopy.m_eConfigType; m_sResourceType = rCopy.m_sResourceType; m_sModule = rCopy.m_sModule; - m_aSharedStorages = rCopy.m_aSharedStorages; m_xWorkingStorageShare = rCopy.m_xWorkingStorageShare; m_xWorkingStorageNoLang = rCopy.m_xWorkingStorageNoLang; m_xWorkingStorageUser = rCopy.m_xWorkingStorageUser; @@ -90,8 +119,9 @@ PresetHandler::~PresetHandler() Otherwise we will disconnect all other open configuration access objects which base on these storages. */ - m_aSharedStorages->m_lStoragesShare.closePath(m_sRelPathShare); - m_aSharedStorages->m_lStoragesUser.closePath (m_sRelPathUser ); + auto & sharedStorages = SharedStorages::get(); + sharedStorages.m_lStoragesShare.closePath(m_sRelPathShare); + sharedStorages.m_lStoragesUser.closePath (m_sRelPathUser ); /* On the other side closePath() is not needed for our special handled document storage. Because it's not shared with others ... so we can @@ -155,7 +185,8 @@ void lcl_throwCorruptedUIConfigurationException( css::uno::Reference< css::embed::XStorage > PresetHandler::getOrCreateRootStorageShare() { - css::uno::Reference< css::embed::XStorage > xRoot = m_aSharedStorages->m_lStoragesShare.getRootStorage(); + auto & sharedStorages = SharedStorages::get(); + css::uno::Reference< css::embed::XStorage > xRoot = sharedStorages.m_lStoragesShare.getRootStorage(); if (xRoot.is()) return xRoot; @@ -205,14 +236,15 @@ css::uno::Reference< css::embed::XStorage > PresetHandler::getOrCreateRootStorag ex, ID_CORRUPT_UICONFIG_SHARE); } - m_aSharedStorages->m_lStoragesShare.setRootStorage(xStorage); + sharedStorages.m_lStoragesShare.setRootStorage(xStorage); return xStorage; } css::uno::Reference< css::embed::XStorage > PresetHandler::getOrCreateRootStorageUser() { - css::uno::Reference< css::embed::XStorage > xRoot = m_aSharedStorages->m_lStoragesUser.getRootStorage(); + auto & sharedStorages = SharedStorages::get(); + css::uno::Reference< css::embed::XStorage > xRoot = sharedStorages.m_lStoragesUser.getRootStorage(); if (xRoot.is()) return xRoot; @@ -252,7 +284,7 @@ css::uno::Reference< css::embed::XStorage > PresetHandler::getOrCreateRootStorag ex, ID_CORRUPT_UICONFIG_USER); } - m_aSharedStorages->m_lStoragesUser.setRootStorage(xStorage); + sharedStorages.m_lStoragesUser.setRootStorage(xStorage); return xStorage; } @@ -277,7 +309,7 @@ css::uno::Reference< css::embed::XStorage > PresetHandler::getParentStorageShare xWorking = m_xWorkingStorageShare; } - return m_aSharedStorages->m_lStoragesShare.getParentStorage(xWorking); + return SharedStorages::get().m_lStoragesShare.getParentStorage(xWorking); } css::uno::Reference< css::embed::XStorage > PresetHandler::getParentStorageUser(const css::uno::Reference< css::embed::XStorage >& /*xChild*/) @@ -288,7 +320,7 @@ css::uno::Reference< css::embed::XStorage > PresetHandler::getParentStorageUser( xWorking = m_xWorkingStorageUser; } - return m_aSharedStorages->m_lStoragesUser.getParentStorage(xWorking); + return SharedStorages::get().m_lStoragesUser.getParentStorage(xWorking); } void PresetHandler::connectToResource( PresetHandler::EConfigType eConfigType , @@ -616,9 +648,10 @@ void PresetHandler::commitUserChanges() case E_GLOBAL : case E_MODULES : { - sPath = m_aSharedStorages->m_lStoragesUser.getPathOfStorage(xWorking); - m_aSharedStorages->m_lStoragesUser.commitPath(sPath); - m_aSharedStorages->m_lStoragesUser.notifyPath(sPath); + auto & sharedStorages = SharedStorages::get(); + sPath = sharedStorages.m_lStoragesUser.getPathOfStorage(xWorking); + sharedStorages.m_lStoragesUser.commitPath(sPath); + sharedStorages.m_lStoragesUser.notifyPath(sPath); } break; @@ -650,7 +683,7 @@ void PresetHandler::addStorageListener(XMLBasedAcceleratorConfiguration* pListen case E_GLOBAL : case E_MODULES : { - m_aSharedStorages->m_lStoragesUser.addStorageListener(pListener, sRelPath); + SharedStorages::get().m_lStoragesUser.addStorageListener(pListener, sRelPath); } break; @@ -680,7 +713,7 @@ void PresetHandler::removeStorageListener(XMLBasedAcceleratorConfiguration* pLis case E_GLOBAL : case E_MODULES : { - m_aSharedStorages->m_lStoragesUser.removeStorageListener(pListener, sRelPath); + SharedStorages::get().m_lStoragesUser.removeStorageListener(pListener, sRelPath); } break; @@ -700,9 +733,9 @@ css::uno::Reference< css::embed::XStorage > PresetHandler::impl_openPathIgnoring try { if (bShare) - xPath = m_aSharedStorages->m_lStoragesShare.openPath(sPath, eMode); + xPath = SharedStorages::get().m_lStoragesShare.openPath(sPath, eMode); else - xPath = m_aSharedStorages->m_lStoragesUser.openPath(sPath, eMode); + xPath = SharedStorages::get().m_lStoragesUser.openPath(sPath, eMode); } catch(const css::uno::RuntimeException&) { throw; } diff --git a/framework/source/inc/accelerators/presethandler.hxx b/framework/source/inc/accelerators/presethandler.hxx index 79d0ff84a1ce..4f005d6ce0e9 100644 --- a/framework/source/inc/accelerators/presethandler.hxx +++ b/framework/source/inc/accelerators/presethandler.hxx @@ -29,7 +29,6 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <comphelper/processfactory.hxx> -#include <salhelper/singletonref.hxx> #include <i18nlangtag/languagetag.hxx> namespace framework @@ -68,34 +67,6 @@ class PresetHandler private: - /** @short because a concurrent access to the same storage from different implementations - isn't supported, we have to share it with others. - - @descr This struct makes it possible to use any shared storage - in combination with a SingletonRef<> template ... - - This struct is allegedly shared and must be used within a - synchronized section. But it isn't. - */ - struct TSharedStorages - { - public: - - StorageHolder m_lStoragesShare; - StorageHolder m_lStoragesUser; - - TSharedStorages() - : m_lStoragesShare() - , m_lStoragesUser () - {}; - - virtual ~TSharedStorages() {}; - }; - - // member - - private: - /** @short can be used to create on needed uno resources. */ css::uno::Reference< css::uno::XComponentContext > m_xContext; @@ -121,12 +92,6 @@ class PresetHandler */ OUString m_sModule; - /** @short provides access to the: - a) shared root storages - b) shared "inbetween" storages - of the share and user layer. */ - ::salhelper::SingletonRef< TSharedStorages > m_aSharedStorages; - /** @short if we run in document mode, we can't use the global root storages! We have to use a special document storage explicitly. */ StorageHolder m_lDocumentStorages; |