Resolves: #i120029# Unregister on dispose.
Patch by: zhang jianfang Review by: Andre Fischer (cherry picked from commit e0d5abb649958e48660357d3fa37ab6e9707b61f) Conflicts: framework/source/uielement/toolbarmanager.cxx Change-Id: I4c6a112b27396fc7e5d42f3feef11ac1fe81efcd
This commit is contained in:
parent
4bdbf36036
commit
11f8e53d6c
@ -634,21 +634,23 @@ OUString XMLBasedAcceleratorConfiguration::impl_ts_getLocale() const
|
||||
|
||||
//-----------------------------------------------
|
||||
// XInterface, XTypeProvider
|
||||
DEFINE_XINTERFACE_7(XCUBasedAcceleratorConfiguration ,
|
||||
DEFINE_XINTERFACE_8(XCUBasedAcceleratorConfiguration ,
|
||||
OWeakObject ,
|
||||
DIRECT_INTERFACE(css::lang::XTypeProvider ),
|
||||
DIRECT_INTERFACE(css::ui::XAcceleratorConfiguration ),
|
||||
DIRECT_INTERFACE(css::util::XChangesListener ),
|
||||
DIRECT_INTERFACE(css::form::XReset ),
|
||||
DIRECT_INTERFACE(css::lang::XComponent ),
|
||||
DIRECT_INTERFACE(css::ui::XUIConfigurationPersistence),
|
||||
DIRECT_INTERFACE(css::ui::XUIConfigurationStorage ),
|
||||
DIRECT_INTERFACE(css::ui::XUIConfiguration ))
|
||||
|
||||
DEFINE_XTYPEPROVIDER_7(XCUBasedAcceleratorConfiguration ,
|
||||
DEFINE_XTYPEPROVIDER_8(XCUBasedAcceleratorConfiguration ,
|
||||
css::lang::XTypeProvider ,
|
||||
css::ui::XAcceleratorConfiguration ,
|
||||
css::util::XChangesListener ,
|
||||
css::form::XReset ,
|
||||
css::lang::XComponent ,
|
||||
css::ui::XUIConfigurationPersistence,
|
||||
css::ui::XUIConfigurationStorage ,
|
||||
css::ui::XUIConfiguration )
|
||||
@ -1249,6 +1251,27 @@ void SAL_CALL XCUBasedAcceleratorConfiguration::disposing(const css::lang::Event
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
void SAL_CALL XCUBasedAcceleratorConfiguration::dispose()
|
||||
throw(css::uno::RuntimeException)
|
||||
{
|
||||
// nop
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
void SAL_CALL XCUBasedAcceleratorConfiguration::addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& /*xListener*/ )
|
||||
throw(css::uno::RuntimeException)
|
||||
{
|
||||
// nop
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
void SAL_CALL XCUBasedAcceleratorConfiguration::removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& /*xListener*/ )
|
||||
throw(css::uno::RuntimeException)
|
||||
{
|
||||
// nop
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
void XCUBasedAcceleratorConfiguration::impl_ts_load( sal_Bool bPreferred, const css::uno::Reference< css::container::XNameAccess >& xCfg )
|
||||
{
|
||||
|
@ -111,6 +111,25 @@ void GlobalAcceleratorConfiguration::impl_ts_fillCache()
|
||||
{}
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
//
|
||||
// XComponent.dispose(), #i120029#, to release the cyclic reference
|
||||
//
|
||||
void SAL_CALL GlobalAcceleratorConfiguration::dispose()
|
||||
throw(css::uno::RuntimeException)
|
||||
{
|
||||
try
|
||||
{
|
||||
css::uno::Reference< css::util::XChangesNotifier > xBroadcaster(m_xCfg, css::uno::UNO_QUERY_THROW);
|
||||
if ( xBroadcaster.is() )
|
||||
xBroadcaster->removeChangesListener(static_cast< css::util::XChangesListener* >(this));
|
||||
}
|
||||
catch(const css::uno::RuntimeException&)
|
||||
{ throw; }
|
||||
catch(const css::uno::Exception&)
|
||||
{}
|
||||
}
|
||||
|
||||
} // namespace framework
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
@ -143,6 +143,25 @@ void ModuleAcceleratorConfiguration::impl_ts_fillCache()
|
||||
{}
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
//
|
||||
// XComponent.dispose(), #i120029#, to release the cyclic reference
|
||||
//
|
||||
void SAL_CALL ModuleAcceleratorConfiguration::dispose()
|
||||
throw(css::uno::RuntimeException)
|
||||
{
|
||||
try
|
||||
{
|
||||
css::uno::Reference< css::util::XChangesNotifier > xBroadcaster(m_xCfg, css::uno::UNO_QUERY_THROW);
|
||||
if ( xBroadcaster.is() )
|
||||
xBroadcaster->removeChangesListener(static_cast< css::util::XChangesListener* >(this));
|
||||
}
|
||||
catch(const css::uno::RuntimeException&)
|
||||
{ throw; }
|
||||
catch(const css::uno::Exception&)
|
||||
{}
|
||||
}
|
||||
|
||||
} // namespace framework
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
@ -290,6 +290,7 @@ class XCUBasedAcceleratorConfiguration : protected ThreadHelpBase
|
||||
, public ::cppu::OWeakObject
|
||||
, public css::lang::XTypeProvider
|
||||
, public css::util::XChangesListener
|
||||
, public css::lang::XComponent
|
||||
, public css::form::XReset // TODO use XPresetHandler instead if available
|
||||
, public css::ui::XAcceleratorConfiguration // => css::ui::XUIConfigurationPersistence
|
||||
// css::ui::XUIConfigurationStorage
|
||||
@ -416,6 +417,11 @@ class XCUBasedAcceleratorConfiguration : protected ThreadHelpBase
|
||||
virtual void SAL_CALL disposing(const css::lang::EventObject& aEvent)
|
||||
throw(css::uno::RuntimeException);
|
||||
|
||||
// XComponent
|
||||
virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException);
|
||||
virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
|
||||
virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
|
||||
|
||||
//______________________________________
|
||||
// helper for derived classes
|
||||
|
||||
|
@ -70,6 +70,9 @@ class GlobalAcceleratorConfiguration : public XCUBasedAcceleratorConfiguration
|
||||
throw (css::uno::Exception ,
|
||||
css::uno::RuntimeException);
|
||||
|
||||
// XComponent
|
||||
virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException);
|
||||
|
||||
//______________________________________
|
||||
// helper
|
||||
|
||||
|
@ -81,6 +81,9 @@ class ModuleAcceleratorConfiguration : public XCUBasedAcceleratorConfiguration
|
||||
throw(css::uno::Exception ,
|
||||
css::uno::RuntimeException);
|
||||
|
||||
// XComponent
|
||||
virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException);
|
||||
|
||||
//______________________________________
|
||||
// helper
|
||||
|
||||
|
@ -761,6 +761,9 @@ void SAL_CALL ModuleUIConfigurationManager::dispose() throw (::com::sun::star::u
|
||||
ResetableGuard aGuard( m_aLock );
|
||||
Reference< XComponent > xModuleImageManager( m_xModuleImageManager );
|
||||
m_xModuleImageManager.clear();
|
||||
Reference< XComponent > xCompMAM( m_xModuleAcceleratorManager, UNO_QUERY );
|
||||
if ( xCompMAM.is() )
|
||||
xCompMAM->dispose();
|
||||
m_xModuleAcceleratorManager.clear();
|
||||
m_aUIElements[LAYER_USERDEFINED].clear();
|
||||
m_aUIElements[LAYER_DEFAULT].clear();
|
||||
|
@ -379,6 +379,9 @@ void SAL_CALL MenuBarManager::dispose() throw( RuntimeException )
|
||||
}
|
||||
m_xDocImageManager.clear();
|
||||
m_xModuleImageManager.clear();
|
||||
Reference< XComponent > xCompGAM( m_xGlobalAcceleratorManager, UNO_QUERY );
|
||||
if ( xCompGAM.is() )
|
||||
xCompGAM->dispose();
|
||||
m_xGlobalAcceleratorManager.clear();
|
||||
m_xModuleAcceleratorManager.clear();
|
||||
m_xDocAcceleratorManager.clear();
|
||||
|
@ -653,6 +653,9 @@ void SAL_CALL ToolBarManager::dispose() throw( RuntimeException )
|
||||
|
||||
m_xFrame.clear();
|
||||
m_xContext.clear();
|
||||
Reference< XComponent > xCompGAM( m_xGlobalAcceleratorManager, UNO_QUERY );
|
||||
if ( xCompGAM.is() )
|
||||
xCompGAM->dispose();
|
||||
m_xGlobalAcceleratorManager.clear();
|
||||
m_xModuleAcceleratorManager.clear();
|
||||
m_xDocAcceleratorManager.clear();
|
||||
|
Loading…
x
Reference in New Issue
Block a user