diff --git a/vcl/unx/gtk/a11y/atklistener.cxx b/vcl/unx/gtk/a11y/atklistener.cxx index 9dfa66862b0b..5cc6083fc288 100644 --- a/vcl/unx/gtk/a11y/atklistener.cxx +++ b/vcl/unx/gtk/a11y/atklistener.cxx @@ -196,6 +196,15 @@ void AtkListener::handleChildRemoved( // for now. if( nIndex >= 0 ) { + uno::Reference xBroadcaster( + rxChild->getAccessibleContext(), uno::UNO_QUERY); + + if (xBroadcaster.is()) + { + uno::Reference xListener(this); + xBroadcaster->removeAccessibleEventListener(xListener); + } + updateChildList(rxParent); AtkObject * pChild = atk_object_wrapper_ref( rxChild, false ); diff --git a/vcl/unx/gtk/a11y/atkwrapper.cxx b/vcl/unx/gtk/a11y/atkwrapper.cxx index 0d4618ae6c23..52f92186c846 100644 --- a/vcl/unx/gtk/a11y/atkwrapper.cxx +++ b/vcl/unx/gtk/a11y/atkwrapper.cxx @@ -846,7 +846,10 @@ atk_object_wrapper_new( const css::uno::Reference< css::accessibility::XAccessib { uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster(xContext, uno::UNO_QUERY); if( xBroadcaster.is() ) - xBroadcaster->addAccessibleEventListener( static_cast< accessibility::XAccessibleEventListener * > ( new AtkListener(pWrap) ) ); + { + uno::Reference xListener(new AtkListener(pWrap)); + xBroadcaster->addAccessibleEventListener(xListener); + } else OSL_ASSERT( false ); }