diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2021-12-18 20:24:15 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-12-20 17:52:01 +0100 |
commit | dab35c152af3345786b8335e83cd067b67d08b81 (patch) | |
tree | c1fdcba765171139f08590067f15065a63cd594b | |
parent | d246fcf94638604911ef11ff2f4bdc0c5ba8dbfc (diff) |
osl::Mutex->std::mutex in ModuleUIConfigurationManager
Change-Id: I012ba8ab049fd19832e9f1df643957e57c05b69c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127109
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx b/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx index b2346455d228..28c2b150f9bb 100644 --- a/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx +++ b/framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx @@ -54,11 +54,12 @@ #include <cppuhelper/supportsservice.hxx> #include <vcl/svapp.hxx> #include <sal/log.hxx> -#include <comphelper/multicontainer2.hxx> +#include <comphelper/interfacecontainer4.hxx> #include <comphelper/propertyvalue.hxx> #include <comphelper/sequenceashashmap.hxx> #include <comphelper/servicehelper.hxx> #include <memory> +#include <mutex> #include <string_view> using namespace css; @@ -212,8 +213,9 @@ private: OUString m_aModuleIdentifier; css::uno::Reference< css::embed::XTransactedObject > m_xUserRootCommit; css::uno::Reference< css::uno::XComponentContext > m_xContext; - osl::Mutex m_mutex; - comphelper::OMultiTypeInterfaceContainerHelper2 m_aListenerContainer; /// container for ALL Listener + std::mutex m_mutex; + comphelper::OInterfaceContainerHelper4<css::lang::XEventListener> m_aEventListeners; + comphelper::OInterfaceContainerHelper4<css::ui::XUIConfigurationListener> m_aConfigListeners; rtl::Reference< ImageManager > m_xModuleImageManager; css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xModuleAcceleratorManager; }; @@ -829,7 +831,6 @@ ModuleUIConfigurationManager::ModuleUIConfigurationManager( , m_aXMLPostfix( ".xml" ) , m_aPropUIName( "UIName" ) , m_xContext( xContext ) - , m_aListenerContainer( m_mutex ) { // Make sure we have a default initialized entry for every layer and user interface element type! // The following code depends on this! @@ -897,7 +898,14 @@ void SAL_CALL ModuleUIConfigurationManager::dispose() Reference< XComponent > xThis(this); css::lang::EventObject aEvent( xThis ); - m_aListenerContainer.disposeAndClear( aEvent ); + { + std::unique_lock aGuard(m_mutex); + m_aEventListeners.disposeAndClear( aGuard, aEvent ); + } + { + std::unique_lock aGuard(m_mutex); + m_aConfigListeners.disposeAndClear( aGuard, aEvent ); + } /* SAFE AREA ----------------------------------------------------------------------------------------------- */ SolarMutexClearableGuard aGuard; @@ -934,13 +942,15 @@ void SAL_CALL ModuleUIConfigurationManager::addEventListener( const Reference< X throw DisposedException(); } - m_aListenerContainer.addInterface( cppu::UnoType<XEventListener>::get(), xListener ); + std::unique_lock aGuard(m_mutex); + m_aEventListeners.addInterface( xListener ); } void SAL_CALL ModuleUIConfigurationManager::removeEventListener( const Reference< XEventListener >& xListener ) { /* SAFE AREA ----------------------------------------------------------------------------------------------- */ - m_aListenerContainer.removeInterface( cppu::UnoType<XEventListener>::get(), xListener ); + std::unique_lock aGuard(m_mutex); + m_aEventListeners.removeInterface( xListener ); } // XUIConfiguration @@ -954,13 +964,15 @@ void SAL_CALL ModuleUIConfigurationManager::addConfigurationListener( const Refe throw DisposedException(); } - m_aListenerContainer.addInterface( cppu::UnoType<ui::XUIConfigurationListener>::get(), xListener ); + std::unique_lock aGuard(m_mutex); + m_aConfigListeners.addInterface( xListener ); } void SAL_CALL ModuleUIConfigurationManager::removeConfigurationListener( const Reference< css::ui::XUIConfigurationListener >& xListener ) { /* SAFE AREA ----------------------------------------------------------------------------------------------- */ - m_aListenerContainer.removeInterface( cppu::UnoType<ui::XUIConfigurationListener>::get(), xListener ); + std::unique_lock aGuard(m_mutex); + m_aConfigListeners.removeInterface( xListener ); } // XUIConfigurationManager @@ -1610,11 +1622,8 @@ sal_Bool SAL_CALL ModuleUIConfigurationManager::isReadOnly() void ModuleUIConfigurationManager::implts_notifyContainerListener( const ui::ConfigurationEvent& aEvent, NotifyOp eOp ) { - comphelper::OInterfaceContainerHelper2* pContainer = m_aListenerContainer.getContainer( cppu::UnoType<css::ui::XUIConfigurationListener>::get()); - if ( pContainer == nullptr ) - return; - - comphelper::OInterfaceIteratorHelper2 pIterator( *pContainer ); + std::unique_lock aGuard(m_mutex); + comphelper::OInterfaceIteratorHelper4 pIterator( m_aConfigListeners ); while ( pIterator.hasMoreElements() ) { try @@ -1622,13 +1631,13 @@ void ModuleUIConfigurationManager::implts_notifyContainerListener( const ui::Con switch ( eOp ) { case NotifyOp_Replace: - static_cast< css::ui::XUIConfigurationListener*>(pIterator.next())->elementReplaced( aEvent ); + pIterator.next()->elementReplaced( aEvent ); break; case NotifyOp_Insert: - static_cast< css::ui::XUIConfigurationListener*>(pIterator.next())->elementInserted( aEvent ); + pIterator.next()->elementInserted( aEvent ); break; case NotifyOp_Remove: - static_cast< css::ui::XUIConfigurationListener*>(pIterator.next())->elementRemoved( aEvent ); + pIterator.next()->elementRemoved( aEvent ); break; } } |