diff options
-rw-r--r-- | basic/source/basmgr/basicmanagerrepository.cxx | 6 | ||||
-rw-r--r-- | unotools/source/misc/eventlisteneradapter.cxx | 3 |
2 files changed, 6 insertions, 3 deletions
diff --git a/basic/source/basmgr/basicmanagerrepository.cxx b/basic/source/basmgr/basicmanagerrepository.cxx index 9e3aecc249e0..edc73fed8c4a 100644 --- a/basic/source/basmgr/basicmanagerrepository.cxx +++ b/basic/source/basmgr/basicmanagerrepository.cxx @@ -537,12 +537,16 @@ namespace basic OSL_PRECOND( _pos != m_aStore.end(), "ImplRepository::impl_removeFromRepository: invalid position!" ); std::unique_ptr<BasicManager> pManager = std::move(_pos->second); + Reference<XModel> xModel(_pos->first, UNO_QUERY); // *first* remove from map (else Notify won't work properly) m_aStore.erase( _pos ); - // *then* delete the BasicManager EndListening( *pManager ); + + assert(xModel.is()); + if (xModel.is()) + stopComponentListening(xModel); } diff --git a/unotools/source/misc/eventlisteneradapter.cxx b/unotools/source/misc/eventlisteneradapter.cxx index ac3dbe9c615e..c9f6b6f73ee9 100644 --- a/unotools/source/misc/eventlisteneradapter.cxx +++ b/unotools/source/misc/eventlisteneradapter.cxx @@ -84,7 +84,6 @@ namespace utl { Reference< XEventListener > xDeleteUponLeaving = m_xKeepMeAlive; m_xKeepMeAlive.clear(); - m_xComponent.clear(); m_pAdapter->_disposing(_rSource); } @@ -118,7 +117,7 @@ namespace utl do { rtl::Reference<OEventListenerImpl>& pListenerImpl = *it; - if ( pListenerImpl->getComponent().get() == _rxComp.get() ) + if ((pListenerImpl->getComponent().get() == _rxComp.get()) || (pListenerImpl->getComponent() == _rxComp)) { pListenerImpl->dispose(); it = m_pImpl->aListeners.erase( it ); |