diff --git a/winaccessibility/inc/AccEventListener.hxx b/winaccessibility/inc/AccEventListener.hxx index 256780612964..f9153263c987 100644 --- a/winaccessibility/inc/AccEventListener.hxx +++ b/winaccessibility/inc/AccEventListener.hxx @@ -72,7 +72,7 @@ public: //get the accessible parent's role virtual short GetParentRole(); - void RemoveMeFromBroadcaster(bool isNotifyDestroy); + void RemoveMeFromBroadcaster(); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/winaccessibility/source/service/AccEventListener.cxx b/winaccessibility/source/service/AccEventListener.cxx index 82b435e62399..aa9d291b6d6a 100644 --- a/winaccessibility/source/service/AccEventListener.cxx +++ b/winaccessibility/source/service/AccEventListener.cxx @@ -244,47 +244,36 @@ short AccEventListener::GetParentRole() /** * remove the listener from accessible object */ -void AccEventListener::RemoveMeFromBroadcaster(bool const isNotifyDestroy) +void AccEventListener::RemoveMeFromBroadcaster() { + if (!m_xAccessible.is()) + return; + try { - if (!m_xAccessible.is()) + css::uno::Reference const xBroadcaster( + m_xAccessible->getAccessibleContext(), UNO_QUERY); + if (xBroadcaster.is()) { - return; + //remove the lister from accessible object + xBroadcaster->removeAccessibleEventListener(this); } - try - { - css::uno::Reference const xBroadcaster( - m_xAccessible->getAccessibleContext(), UNO_QUERY); - if (xBroadcaster.is()) - { - //remove the lister from accessible object - xBroadcaster->removeAccessibleEventListener(this); - } - } - catch (Exception const&) - { // may throw if it's already disposed - ignore that - } - if (isNotifyDestroy) - { - m_rObjManager.NotifyDestroy(m_xAccessible.get()); - } - m_xAccessible.clear(); // release cyclic reference } - catch (...) - { - return; + catch (Exception const&) + { // may throw if it's already disposed - ignore that } + + m_xAccessible.clear(); // release cyclic reference } /** - * this method is invoked before listener is disposed + * this method is invoked before broadcaster is disposed */ void AccEventListener::disposing(const css::lang::EventObject& /*Source*/) { SolarMutexGuard g; - - RemoveMeFromBroadcaster(true); + // No method should be invoked anymore on broadcaster! + m_xAccessible.clear(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/winaccessibility/source/service/AccObjectWinManager.cxx b/winaccessibility/source/service/AccObjectWinManager.cxx index f2253eae59e1..364f51e19bbc 100644 --- a/winaccessibility/source/service/AccObjectWinManager.cxx +++ b/winaccessibility/source/service/AccObjectWinManager.cxx @@ -474,7 +474,7 @@ void AccObjectWinManager::DeleteAccObj( XAccessible* pXAcc ) } if (pListener) { - pListener->RemoveMeFromBroadcaster(false); + pListener->RemoveMeFromBroadcaster(); } }