Kaydet (Commit) 7e6b6282 authored tarafından Maxim Monastirsky's avatar Maxim Monastirsky

Use WeakComponentImplHelper for MenuBarManager

Change-Id: Ia0c47186f5f266d512c02e92d7983872e207f878
üst 29dd77c7
...@@ -51,9 +51,8 @@ ...@@ -51,9 +51,8 @@
#include <vcl/accel.hxx> #include <vcl/accel.hxx>
#include <vcl/timer.hxx> #include <vcl/timer.hxx>
#include <toolkit/awt/vclxmenu.hxx> #include <toolkit/awt/vclxmenu.hxx>
#include <cppuhelper/implbase.hxx> #include <cppuhelper/basemutex.hxx>
#include <cppuhelper/weakref.hxx> #include <cppuhelper/compbase.hxx>
#include <cppuhelper/interfacecontainer.hxx>
#include <framework/addonsoptions.hxx> #include <framework/addonsoptions.hxx>
namespace framework namespace framework
...@@ -67,11 +66,11 @@ struct PopupControllerEntry ...@@ -67,11 +66,11 @@ struct PopupControllerEntry
typedef std::unordered_map< OUString, PopupControllerEntry, OUStringHash > PopupControllerCache; typedef std::unordered_map< OUString, PopupControllerEntry, OUStringHash > PopupControllerCache;
class MenuBarManager: class MenuBarManager:
public cppu::WeakImplHelper< protected cppu::BaseMutex,
public cppu::WeakComponentImplHelper<
css::frame::XStatusListener, css::frame::XStatusListener,
css::frame::XFrameActionListener, css::frame::XFrameActionListener,
css::ui::XUIConfigurationListener, css::ui::XUIConfigurationListener,
css::lang::XComponent,
css::awt::XSystemDependentMenuPeer> css::awt::XSystemDependentMenuPeer>
{ {
protected: protected:
...@@ -95,11 +94,6 @@ class MenuBarManager: ...@@ -95,11 +94,6 @@ class MenuBarManager:
virtual ~MenuBarManager() override; virtual ~MenuBarManager() override;
// XComponent
virtual void SAL_CALL dispose() override;
virtual void SAL_CALL addEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener ) override;
virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override;
// XStatusListener // XStatusListener
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override; virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override;
...@@ -145,6 +139,7 @@ class MenuBarManager: ...@@ -145,6 +139,7 @@ class MenuBarManager:
DECL_LINK( Deactivate, Menu *, bool ); DECL_LINK( Deactivate, Menu *, bool );
DECL_LINK( AsyncSettingsHdl, Timer *, void ); DECL_LINK( AsyncSettingsHdl, Timer *, void );
void SAL_CALL disposing() override;
void RemoveListener(); void RemoveListener();
void RequestImages(); void RequestImages();
void RetrieveImageManagers(); void RetrieveImageManagers();
...@@ -191,7 +186,6 @@ class MenuBarManager: ...@@ -191,7 +186,6 @@ class MenuBarManager:
void Init(const css::uno::Reference< css::frame::XFrame >& rFrame,Menu* pAddonMenu,bool _bHandlePopUp); void Init(const css::uno::Reference< css::frame::XFrame >& rFrame,Menu* pAddonMenu,bool _bHandlePopUp);
void SetHdl(); void SetHdl();
bool m_bDisposed;
bool m_bDeleteMenu; bool m_bDeleteMenu;
bool m_bActive; bool m_bActive;
bool m_bIsBookmarkMenu; bool m_bIsBookmarkMenu;
...@@ -207,8 +201,6 @@ class MenuBarManager: ...@@ -207,8 +201,6 @@ class MenuBarManager:
css::uno::Reference< css::container::XNameAccess > m_xUICommandLabels; css::uno::Reference< css::container::XNameAccess > m_xUICommandLabels;
css::uno::Reference< css::frame::XUIControllerFactory > m_xPopupMenuControllerFactory; css::uno::Reference< css::frame::XUIControllerFactory > m_xPopupMenuControllerFactory;
::std::vector< MenuItemHandler* > m_aMenuItemHandlerVector; ::std::vector< MenuItemHandler* > m_aMenuItemHandlerVector;
osl::Mutex m_mutex;
::cppu::OMultiTypeInterfaceContainerHelper m_aListenerContainer; /// container for ALL Listener
css::uno::Reference< css::frame::XDispatchProvider > m_xDispatchProvider; css::uno::Reference< css::frame::XDispatchProvider > m_xDispatchProvider;
css::uno::Reference< css::ui::XImageManager > m_xDocImageManager; css::uno::Reference< css::ui::XImageManager > m_xDocImageManager;
css::uno::Reference< css::ui::XImageManager > m_xModuleImageManager; css::uno::Reference< css::ui::XImageManager > m_xModuleImageManager;
......
...@@ -71,10 +71,7 @@ ...@@ -71,10 +71,7 @@
#include <vcl/menu.hxx> #include <vcl/menu.hxx>
#include <vcl/settings.hxx> #include <vcl/settings.hxx>
#include <vcl/commandinfoprovider.hxx> #include <vcl/commandinfoprovider.hxx>
#include <osl/mutex.hxx>
#include <osl/file.hxx> #include <osl/file.hxx>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <svtools/acceleratorexecute.hxx> #include <svtools/acceleratorexecute.hxx>
#include <svtools/miscopt.hxx> #include <svtools/miscopt.hxx>
#include <uielement/menubarmerger.hxx> #include <uielement/menubarmerger.hxx>
...@@ -127,12 +124,11 @@ MenuBarManager::MenuBarManager( ...@@ -127,12 +124,11 @@ MenuBarManager::MenuBarManager(
const Reference< XDispatchProvider >& rDispatchProvider, const Reference< XDispatchProvider >& rDispatchProvider,
const OUString& rModuleIdentifier, const OUString& rModuleIdentifier,
Menu* pMenu, bool bDelete, bool bHasMenuBar ): Menu* pMenu, bool bDelete, bool bHasMenuBar ):
m_bDisposed( false ) WeakComponentImplHelper( m_aMutex )
, m_bRetrieveImages( false ) , m_bRetrieveImages( false )
, m_bAcceleratorCfg( false ) , m_bAcceleratorCfg( false )
, m_bModuleIdentified( false ) , m_bModuleIdentified( false )
, m_bHasMenuBar( bHasMenuBar ) , m_bHasMenuBar( bHasMenuBar )
, m_aListenerContainer( m_mutex )
, m_xContext(rxContext) , m_xContext(rxContext)
, m_xURLTransformer(_xURLTransformer) , m_xURLTransformer(_xURLTransformer)
, m_sIconTheme( SvtMiscOptions().GetIconTheme() ) , m_sIconTheme( SvtMiscOptions().GetIconTheme() )
...@@ -148,12 +144,11 @@ MenuBarManager::MenuBarManager( ...@@ -148,12 +144,11 @@ MenuBarManager::MenuBarManager(
const Reference< XURLTransformer >& _xURLTransformer, const Reference< XURLTransformer >& _xURLTransformer,
Menu* pAddonMenu, Menu* pAddonMenu,
bool popup): bool popup):
m_bDisposed( false ) WeakComponentImplHelper( m_aMutex )
, m_bRetrieveImages( true ) , m_bRetrieveImages( true )
, m_bAcceleratorCfg( false ) , m_bAcceleratorCfg( false )
, m_bModuleIdentified( false ) , m_bModuleIdentified( false )
, m_bHasMenuBar( true ) , m_bHasMenuBar( true )
, m_aListenerContainer( m_mutex )
, m_xContext(rxContext) , m_xContext(rxContext)
, m_xURLTransformer(_xURLTransformer) , m_xURLTransformer(_xURLTransformer)
, m_sIconTheme( SvtMiscOptions().GetIconTheme() ) , m_sIconTheme( SvtMiscOptions().GetIconTheme() )
...@@ -166,7 +161,7 @@ Any SAL_CALL MenuBarManager::getMenuHandle( const Sequence< sal_Int8 >& /*Proces ...@@ -166,7 +161,7 @@ Any SAL_CALL MenuBarManager::getMenuHandle( const Sequence< sal_Int8 >& /*Proces
{ {
SolarMutexGuard aSolarGuard; SolarMutexGuard aSolarGuard;
if ( m_bDisposed ) if ( rBHelper.bDisposed || rBHelper.bInDispose )
throw css::lang::DisposedException(); throw css::lang::DisposedException();
Any a; Any a;
...@@ -203,7 +198,7 @@ void MenuBarManager::Destroy() ...@@ -203,7 +198,7 @@ void MenuBarManager::Destroy()
{ {
SolarMutexGuard aGuard; SolarMutexGuard aGuard;
if ( !m_bDisposed ) if ( !rBHelper.bDisposed )
{ {
// stop asynchronous settings timer and // stop asynchronous settings timer and
// release defered item container reference // release defered item container reference
...@@ -230,69 +225,45 @@ void MenuBarManager::Destroy() ...@@ -230,69 +225,45 @@ void MenuBarManager::Destroy()
} }
// XComponent // XComponent
void SAL_CALL MenuBarManager::dispose() void SAL_CALL MenuBarManager::disposing()
{ {
Reference< XComponent > xThis( static_cast< OWeakObject* >(this), UNO_QUERY ); Reference< XComponent > xThis( static_cast< OWeakObject* >(this), UNO_QUERY );
EventObject aEvent( xThis ); SolarMutexGuard g;
m_aListenerContainer.disposeAndClear( aEvent ); Destroy();
if ( m_xDocImageManager.is() )
{ {
SolarMutexGuard g; try
Destroy();
m_bDisposed = true;
if ( m_xDocImageManager.is() )
{ {
try m_xDocImageManager->removeConfigurationListener(
{ Reference< XUIConfigurationListener >(
m_xDocImageManager->removeConfigurationListener( static_cast< OWeakObject* >( this ), UNO_QUERY ));
Reference< XUIConfigurationListener >(
static_cast< OWeakObject* >( this ), UNO_QUERY ));
}
catch ( const Exception& )
{
}
} }
if ( m_xModuleImageManager.is() ) catch ( const Exception& )
{ {
try
{
m_xModuleImageManager->removeConfigurationListener(
Reference< XUIConfigurationListener >(
static_cast< OWeakObject* >( this ), UNO_QUERY ));
}
catch ( const Exception& )
{
}
} }
m_xDocImageManager.clear();
m_xModuleImageManager.clear();
m_xGlobalAcceleratorManager.clear();
m_xModuleAcceleratorManager.clear();
m_xDocAcceleratorManager.clear();
m_xUICommandLabels.clear();
m_xPopupMenuControllerFactory.clear();
m_xContext.clear();
} }
} if ( m_xModuleImageManager.is() )
{
void SAL_CALL MenuBarManager::addEventListener( const Reference< XEventListener >& xListener ) try
{ {
SolarMutexGuard g; m_xModuleImageManager->removeConfigurationListener(
Reference< XUIConfigurationListener >(
/* SAFE AREA ----------------------------------------------------------------------------------------------- */ static_cast< OWeakObject* >( this ), UNO_QUERY ));
if ( m_bDisposed ) }
throw DisposedException(); catch ( const Exception& )
{
m_aListenerContainer.addInterface( cppu::UnoType<XEventListener>::get(), xListener ); }
} }
m_xDocImageManager.clear();
void SAL_CALL MenuBarManager::removeEventListener( const Reference< XEventListener >& xListener ) m_xModuleImageManager.clear();
{ m_xGlobalAcceleratorManager.clear();
SolarMutexGuard g; m_xModuleAcceleratorManager.clear();
/* SAFE AREA ----------------------------------------------------------------------------------------------- */ m_xDocAcceleratorManager.clear();
m_aListenerContainer.removeInterface( cppu::UnoType<XEventListener>::get(), xListener ); m_xUICommandLabels.clear();
m_xPopupMenuControllerFactory.clear();
m_xContext.clear();
} }
void SAL_CALL MenuBarManager::elementInserted( const css::ui::ConfigurationEvent& Event ) void SAL_CALL MenuBarManager::elementInserted( const css::ui::ConfigurationEvent& Event )
...@@ -300,7 +271,7 @@ void SAL_CALL MenuBarManager::elementInserted( const css::ui::ConfigurationEvent ...@@ -300,7 +271,7 @@ void SAL_CALL MenuBarManager::elementInserted( const css::ui::ConfigurationEvent
SolarMutexGuard g; SolarMutexGuard g;
/* SAFE AREA ----------------------------------------------------------------------------------------------- */ /* SAFE AREA ----------------------------------------------------------------------------------------------- */
if ( m_bDisposed ) if ( rBHelper.bDisposed || rBHelper.bInDispose )
return; return;
sal_Int16 nImageType = sal_Int16(); sal_Int16 nImageType = sal_Int16();
...@@ -325,7 +296,7 @@ void SAL_CALL MenuBarManager::frameAction( const FrameActionEvent& Action ) ...@@ -325,7 +296,7 @@ void SAL_CALL MenuBarManager::frameAction( const FrameActionEvent& Action )
{ {
SolarMutexGuard g; SolarMutexGuard g;
if ( m_bDisposed ) if ( rBHelper.bDisposed || rBHelper.bInDispose )
throw css::lang::DisposedException(); throw css::lang::DisposedException();
if ( Action.Action == FrameAction_CONTEXT_CHANGED ) if ( Action.Action == FrameAction_CONTEXT_CHANGED )
...@@ -356,7 +327,7 @@ void SAL_CALL MenuBarManager::statusChanged( const FeatureStateEvent& Event ) ...@@ -356,7 +327,7 @@ void SAL_CALL MenuBarManager::statusChanged( const FeatureStateEvent& Event )
SolarMutexGuard aSolarGuard; SolarMutexGuard aSolarGuard;
{ {
if ( m_bDisposed ) if ( rBHelper.bDisposed || rBHelper.bInDispose )
return; return;
// We have to check all menu entries as there can be identical entries in a popup menu. // We have to check all menu entries as there can be identical entries in a popup menu.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment