basic/source/inc/namecont.hxx                          |   18 -
 basic/source/uno/namecont.cxx                          |   19 -
 comphelper/Library_comphelper.mk                       |    1 
 comphelper/source/misc/listenernotification.cxx        |  114 -------
 extensions/source/propctrlr/eformshelper.cxx           |   21 -
 extensions/source/propctrlr/eventhandler.cxx           |    6 
 extensions/source/propctrlr/formgeometryhandler.cxx    |    1 
 extensions/source/propctrlr/genericpropertyhandler.hxx |    1 
 extensions/source/propctrlr/pcrcommon.hxx              |    7 
 extensions/source/propctrlr/propertycomposer.cxx       |    8 
 extensions/source/propctrlr/propertyhandler.cxx        |   16 -
 forms/Library_frm.mk                                   |    1 
 forms/source/component/DatabaseForm.cxx                |   24 -
 forms/source/component/DatabaseForm.hxx                |    3 
 forms/source/inc/listenercontainers.hxx                |  110 -------
 forms/source/misc/listenercontainers.cxx               |   58 ---
 include/comphelper/listenernotification.hxx            |  266 -----------------
 reportdesign/source/ui/inc/GeometryHandler.hxx         |    6 
 reportdesign/source/ui/inspection/GeometryHandler.cxx  |   16 -
 sd/source/ui/slideshow/slideshowviewimpl.cxx           |  110 ++-----
 sd/source/ui/slideshow/slideshowviewimpl.hxx           |   30 -
 solenv/clang-format/excludelist                        |    2 
 22 files changed, 112 insertions(+), 726 deletions(-)

New commits:
commit f9f5c9f0d6af2cb2f39d5bc1513216b8d892977c
Author:     Noel Grandin <[email protected]>
AuthorDate: Fri Dec 3 09:38:14 2021 +0200
Commit:     Noel Grandin <[email protected]>
CommitDate: Fri Dec 3 20:42:00 2021 +0100

    replace comphelper::OListenerContainer with OInterfaceContainerHelper3
    
    OInterfaceContainerHelper3 is in wide use and can do the same thing with
    less ceremony
    
    Change-Id: I5252738d6b7bda6245c66da46352944ead79bd52
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126271
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <[email protected]>

diff --git a/basic/source/inc/namecont.hxx b/basic/source/inc/namecont.hxx
index 6a3b020d00a4..11c5febe0a04 100644
--- a/basic/source/inc/namecont.hxx
+++ b/basic/source/inc/namecont.hxx
@@ -50,7 +50,6 @@
 #include <cppuhelper/basemutex.hxx>
 #include <rtl/ref.hxx>
 #include <comphelper/interfacecontainer3.hxx>
-#include <comphelper/listenernotification.hxx>
 #include <xmlscript/xmllib_imexp.hxx>
 #include <comphelper/interfacecontainer3.hxx>
 
@@ -158,21 +157,8 @@ public:
 };
 
 
-typedef ::comphelper::OListenerContainerBase<
-    css::script::vba::XVBAScriptListener,
-    css::script::vba::VBAScriptEvent > VBAScriptListenerContainer_BASE;
-
-class VBAScriptListenerContainer final : public VBAScriptListenerContainer_BASE
-{
-public:
-    explicit VBAScriptListenerContainer( ::osl::Mutex& rMutex );
-
-private:
-    virtual bool implTypedNotify(
-        const css::uno::Reference< css::script::vba::XVBAScriptListener >& 
rxListener,
-        const css::script::vba::VBAScriptEvent& rEvent ) override;
-};
-
+typedef ::comphelper::OInterfaceContainerHelper3<
+    css::script::vba::XVBAScriptListener > VBAScriptListenerContainer;
 
 class SfxLibrary;
 
diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx
index 87b33ea9be66..b92f5a590617 100644
--- a/basic/source/uno/namecont.cxx
+++ b/basic/source/uno/namecont.cxx
@@ -338,17 +338,6 @@ void ModifiableHelper::setModified( bool _bModified )
 }
 
 
-VBAScriptListenerContainer::VBAScriptListenerContainer( ::osl::Mutex& rMutex ) 
:
-    VBAScriptListenerContainer_BASE( rMutex )
-{
-}
-
-bool VBAScriptListenerContainer::implTypedNotify( const Reference< 
vba::XVBAScriptListener >& rxListener, const vba::VBAScriptEvent& rEvent )
-{
-    rxListener->notifyVBAScriptEvent( rEvent );
-    return true;    // notify all other listeners too
-}
-
 // Ctor
 SfxLibraryContainer::SfxLibraryContainer()
     : SfxLibraryContainer_BASE( m_aMutex )
@@ -2675,7 +2664,7 @@ void SAL_CALL SfxLibraryContainer::disposing()
 {
     Reference< XModel > xModel = mxOwnerDocument;
     EventObject aEvent( xModel );
-    maVBAScriptListeners.disposing( aEvent );
+    maVBAScriptListeners.disposeAndClear( aEvent );
     stopAllComponentListening();
     mxOwnerDocument.clear();
 }
@@ -2850,12 +2839,12 @@ sal_Int32 SAL_CALL 
SfxLibraryContainer::getRunningVBAScripts()
 
 void SAL_CALL SfxLibraryContainer::addVBAScriptListener( const Reference< 
vba::XVBAScriptListener >& rxListener )
 {
-    maVBAScriptListeners.addTypedListener( rxListener );
+    maVBAScriptListeners.addInterface( rxListener );
 }
 
 void SAL_CALL SfxLibraryContainer::removeVBAScriptListener( const Reference< 
vba::XVBAScriptListener >& rxListener )
 {
-    maVBAScriptListeners.removeTypedListener( rxListener );
+    maVBAScriptListeners.removeInterface( rxListener );
 }
 
 void SAL_CALL SfxLibraryContainer::broadcastVBAScriptEvent( sal_Int32 
nIdentifier, const OUString& rModuleName )
@@ -2875,7 +2864,7 @@ void SAL_CALL 
SfxLibraryContainer::broadcastVBAScriptEvent( sal_Int32 nIdentifie
 
     Reference< XModel > xModel = mxOwnerDocument;  // weak-ref -> ref
     vba::VBAScriptEvent aEvent( Reference<XInterface>(xModel, UNO_QUERY), 
nIdentifier, rModuleName );
-    maVBAScriptListeners.notify( aEvent );
+    maVBAScriptListeners.notifyEach( 
&css::script::vba::XVBAScriptListener::notifyVBAScriptEvent, aEvent );
 }
 
 // Methods XServiceInfo
diff --git a/comphelper/Library_comphelper.mk b/comphelper/Library_comphelper.mk
index 1da5e7daa658..c4d9e4587f3c 100644
--- a/comphelper/Library_comphelper.mk
+++ b/comphelper/Library_comphelper.mk
@@ -108,7 +108,6 @@ $(eval $(call gb_Library_add_exception_objects,comphelper,\
     comphelper/source/misc/hash \
     comphelper/source/misc/instancelocker \
     comphelper/source/misc/interaction \
-    comphelper/source/misc/listenernotification \
     comphelper/source/misc/logging \
     comphelper/source/misc/lok \
     comphelper/source/misc/mimeconfighelper \
diff --git a/comphelper/source/misc/listenernotification.cxx 
b/comphelper/source/misc/listenernotification.cxx
deleted file mode 100644
index 4bb4e7f619a0..000000000000
--- a/comphelper/source/misc/listenernotification.cxx
+++ /dev/null
@@ -1,114 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <comphelper/listenernotification.hxx>
-
-#include <com/sun/star/lang/XEventListener.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <osl/diagnose.h>
-
-
-namespace comphelper
-{
-
-
-    using namespace ::com::sun::star::uno;
-    using namespace ::com::sun::star::lang;
-
-    OListenerContainer::OListenerContainer( ::osl::Mutex& _rMutex )
-        :m_aListeners( _rMutex )
-    {
-    }
-
-    OListenerContainer::~OListenerContainer() {}
-
-
-    void OListenerContainer::impl_addListener( const Reference< XEventListener 
>& _rxListener )
-    {
-        OSL_PRECOND( _rxListener.is(), "OListenerContainer::impl_addListener: 
a NULL listener?!" );
-        if ( _rxListener.is() )
-            m_aListeners.addInterface( _rxListener );
-    }
-
-
-    void OListenerContainer::impl_removeListener( const Reference< 
XEventListener >& _rxListener )
-    {
-#if OSL_DEBUG_LEVEL > 0
-        ::comphelper::OInterfaceIteratorHelper2 aIter( m_aListeners );
-        bool bFound = false;
-        while ( aIter.hasMoreElements() && !bFound )
-        {
-            bFound = ( Reference< XInterface >( aIter.next() ) == _rxListener 
);
-        }
-        OSL_ENSURE( bFound, "OListenerContainer::impl_removeListener: sure 
your listener handling is correct? The given listener is not registered!" );
-#endif
-        m_aListeners.removeInterface( _rxListener );
-    }
-
-
-    void OListenerContainer::disposing( const EventObject& _rEventSource )
-    {
-        m_aListeners.disposeAndClear( _rEventSource );
-    }
-
-
-    void OListenerContainer::clear()
-    {
-        m_aListeners.clear();
-    }
-
-
-    bool OListenerContainer::impl_notify( const EventObject& _rEvent )
-    {
-        ::comphelper::OInterfaceIteratorHelper2 aIter( m_aListeners );
-        bool bCancelled = false;
-        while ( aIter.hasMoreElements() && !bCancelled )
-        {
-            Reference< XEventListener > xListener( static_cast< 
XEventListener* >( aIter.next() ) );
-            if ( !xListener.is() )
-                continue;
-
-            try
-            {
-                bCancelled = !implNotify( xListener, _rEvent );
-            }
-            catch( const DisposedException& e )
-            {
-                // DisposedExceptions from the listener might indicate a
-                // broken connection to a different environment.
-
-                OSL_ENSURE( e.Context.is(), "OListenerContainer::impl_notify: 
caught dispose exception with empty Context field" );
-
-                // If the exception stems from the listener then remove it
-                // from the list of listeners.  If the Context field of the
-                // exception is empty this is interpreted to indicate the
-                // listener as well.
-                if ( e.Context == xListener || !e.Context.is() )
-                    aIter.remove();
-            }
-        }
-
-        return !bCancelled;
-    }
-
-
-}   // namespace comphelper
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/extensions/source/propctrlr/eformshelper.cxx 
b/extensions/source/propctrlr/eformshelper.cxx
index ff0a91e0e518..c880f096b4b2 100644
--- a/extensions/source/propctrlr/eformshelper.cxx
+++ b/extensions/source/propctrlr/eformshelper.cxx
@@ -241,10 +241,10 @@ namespace pcr
     {
         if ( !_bDoListen )
         {
-            ::comphelper::OInterfaceIteratorHelper2 aListenerIterator = 
m_aPropertyListeners.createIterator();
+            ::comphelper::OInterfaceIteratorHelper3 
aListenerIterator(m_aPropertyListeners);
             while ( aListenerIterator.hasMoreElements() )
             {
-                PropertyEventTranslation* pTranslator = dynamic_cast< 
PropertyEventTranslation* >( aListenerIterator.next() );
+                PropertyEventTranslation* pTranslator = dynamic_cast< 
PropertyEventTranslation* >( aListenerIterator.next().get() );
                 OSL_ENSURE( pTranslator, 
"EFormsHelper::impl_toggleBindingPropertyListening_throw: invalid listener 
element in my container!" );
                 if ( !pTranslator )
                     continue;
@@ -255,7 +255,7 @@ namespace pcr
                     if ( pTranslator->getDelegator() == 
_rxConcreteListenerOrNull )
                     {
                         impl_switchBindingListening_throw( false, 
xEventSourceTranslator );
-                        m_aPropertyListeners.removeListener( 
xEventSourceTranslator );
+                        m_aPropertyListeners.removeInterface( 
xEventSourceTranslator );
                         break;
                     }
                 }
@@ -270,17 +270,14 @@ namespace pcr
             if ( _rxConcreteListenerOrNull.is() )
             {
                 Reference< XPropertyChangeListener > xEventSourceTranslator( 
new PropertyEventTranslation( _rxConcreteListenerOrNull, m_xBindableControl ) );
-                m_aPropertyListeners.addListener( xEventSourceTranslator );
+                m_aPropertyListeners.addInterface( xEventSourceTranslator );
                 impl_switchBindingListening_throw( true, 
xEventSourceTranslator );
             }
             else
             {
-                ::comphelper::OInterfaceIteratorHelper2 aListenerIterator = 
m_aPropertyListeners.createIterator();
+                ::comphelper::OInterfaceIteratorHelper3 
aListenerIterator(m_aPropertyListeners);
                 while ( aListenerIterator.hasMoreElements() )
-                {
-                    Reference< XPropertyChangeListener > xListener( 
aListenerIterator.next(), UNO_QUERY );
-                    impl_switchBindingListening_throw( true, xListener );
-                }
+                    impl_switchBindingListening_throw( true, 
aListenerIterator.next() );
             }
         }
     }
@@ -702,7 +699,7 @@ namespace pcr
 
     void EFormsHelper::firePropertyChange( const OUString& _rName, const Any& 
_rOldValue, const Any& _rNewValue ) const
     {
-        if ( m_aPropertyListeners.empty() )
+        if ( m_aPropertyListeners.getLength() == 0 )
             return;
 
         if ( _rOldValue == _rNewValue )
@@ -717,7 +714,7 @@ namespace pcr
             aEvent.OldValue = _rOldValue;
             aEvent.NewValue = _rNewValue;
 
-            const_cast< EFormsHelper* >( this )->m_aPropertyListeners.notify( 
aEvent, &XPropertyChangeListener::propertyChange );
+            const_cast< EFormsHelper* >( this 
)->m_aPropertyListeners.notifyEach( &XPropertyChangeListener::propertyChange, 
aEvent );
         }
         catch( const Exception& )
         {
@@ -728,7 +725,7 @@ namespace pcr
 
     void EFormsHelper::firePropertyChanges( const Reference< XPropertySet >& 
_rxOldProps, const Reference< XPropertySet >& _rxNewProps, std::set< OUString 
>& _rFilter ) const
     {
-        if ( m_aPropertyListeners.empty() )
+        if ( m_aPropertyListeners.getLength() == 0 )
             return;
 
         try
diff --git a/extensions/source/propctrlr/eventhandler.cxx 
b/extensions/source/propctrlr/eventhandler.cxx
index 34b07b5888ac..5939110d0ede 100644
--- a/extensions/source/propctrlr/eventhandler.cxx
+++ b/extensions/source/propctrlr/eventhandler.cxx
@@ -541,7 +541,7 @@ namespace pcr
         aEvent.PropertyName = _rPropertyName;
         aEvent.OldValue <<= aOldScriptEvent;
         aEvent.NewValue <<= aNewScriptEvent;
-        m_aPropertyListeners.notify( aEvent, 
&XPropertyChangeListener::propertyChange );
+        m_aPropertyListeners.notifyEach( 
&XPropertyChangeListener::propertyChange, aEvent );
     }
 
     Any SAL_CALL EventHandler::convertToPropertyValue( const OUString& 
_rPropertyName, const Any& _rControlValue )
@@ -642,13 +642,13 @@ namespace pcr
         ::osl::MutexGuard aGuard( m_aMutex );
         if ( !_rxListener.is() )
             throw NullPointerException();
-        m_aPropertyListeners.addListener( _rxListener );
+        m_aPropertyListeners.addInterface( _rxListener );
     }
 
     void SAL_CALL EventHandler::removePropertyChangeListener( const Reference< 
XPropertyChangeListener >& _rxListener )
     {
         ::osl::MutexGuard aGuard( m_aMutex );
-        m_aPropertyListeners.removeListener( _rxListener );
+        m_aPropertyListeners.removeInterface( _rxListener );
     }
 
     Sequence< Property > SAL_CALL EventHandler::getSupportedProperties()
diff --git a/extensions/source/propctrlr/formgeometryhandler.cxx 
b/extensions/source/propctrlr/formgeometryhandler.cxx
index f33ee1a6df78..356a694dc513 100644
--- a/extensions/source/propctrlr/formgeometryhandler.cxx
+++ b/extensions/source/propctrlr/formgeometryhandler.cxx
@@ -41,6 +41,7 @@
 
 #include <cppuhelper/implbase.hxx>
 #include <cppuhelper/interfacecontainer.hxx>
+#include <comphelper/interfacecontainer2.hxx>
 #include <comphelper/componentbase.hxx>
 #include <rtl/ref.hxx>
 #include <tools/diagnose_ex.h>
diff --git a/extensions/source/propctrlr/genericpropertyhandler.hxx 
b/extensions/source/propctrlr/genericpropertyhandler.hxx
index 152279347a7a..b2114be3cc5e 100644
--- a/extensions/source/propctrlr/genericpropertyhandler.hxx
+++ b/extensions/source/propctrlr/genericpropertyhandler.hxx
@@ -29,6 +29,7 @@
 #include <com/sun/star/inspection/XPropertyHandler.hpp>
 #include <com/sun/star/script/XTypeConverter.hpp>
 #include <com/sun/star/uno/XComponentContext.hpp>
+#include <comphelper/interfacecontainer2.hxx>
 #include <cppuhelper/compbase.hxx>
 #include <rtl/ref.hxx>
 
diff --git a/extensions/source/propctrlr/pcrcommon.hxx 
b/extensions/source/propctrlr/pcrcommon.hxx
index 74cfe6089baa..2ab06e8668de 100644
--- a/extensions/source/propctrlr/pcrcommon.hxx
+++ b/extensions/source/propctrlr/pcrcommon.hxx
@@ -29,9 +29,7 @@
 #include <com/sun/star/uno/Sequence.hxx>
 #include <com/sun/star/beans/XPropertyChangeListener.hpp>
 #include <com/sun/star/beans/PropertyChangeEvent.hpp>
-
-#include <comphelper/listenernotification.hxx>
-
+#include <comphelper/interfacecontainer3.hxx>
 
 namespace pcr
 {
@@ -45,8 +43,7 @@ namespace pcr
 
     //= types
 
-    typedef ::comphelper::OSimpleListenerContainer  <   
css::beans::XPropertyChangeListener
-                                                    ,   
css::beans::PropertyChangeEvent
+    typedef ::comphelper::OInterfaceContainerHelper3  <   
css::beans::XPropertyChangeListener
                                                     >   
PropertyChangeListeners;
 
 
diff --git a/extensions/source/propctrlr/propertycomposer.cxx 
b/extensions/source/propctrlr/propertycomposer.cxx
index b19e32fd9ff1..d77280d9fa18 100644
--- a/extensions/source/propctrlr/propertycomposer.cxx
+++ b/extensions/source/propctrlr/propertycomposer.cxx
@@ -186,14 +186,14 @@ namespace pcr
     void SAL_CALL PropertyComposer::addPropertyChangeListener( const 
Reference< XPropertyChangeListener >& _rxListener )
     {
         MethodGuard aGuard( *this );
-        m_aPropertyListeners.addListener( _rxListener );
+        m_aPropertyListeners.addInterface( _rxListener );
     }
 
 
     void SAL_CALL PropertyComposer::removePropertyChangeListener( const 
Reference< XPropertyChangeListener >& _rxListener )
     {
         MethodGuard aGuard( *this );
-        m_aPropertyListeners.removeListener( _rxListener );
+        m_aPropertyListeners.removeInterface( _rxListener );
     }
 
 
@@ -432,14 +432,14 @@ namespace pcr
         {
             DBG_UNHANDLED_EXCEPTION("extensions.propctrlr");
         }
-        m_aPropertyListeners.notify( aTranslatedEvent, 
&XPropertyChangeListener::propertyChange );
+        m_aPropertyListeners.notifyEach( 
&XPropertyChangeListener::propertyChange, aTranslatedEvent );
     }
 
 
     void SAL_CALL PropertyComposer::disposing( const EventObject& Source )
     {
         MethodGuard aGuard( *this );
-        m_aPropertyListeners.disposing( Source );
+        m_aPropertyListeners.disposeAndClear( Source );
     }
 
 
diff --git a/extensions/source/propctrlr/propertyhandler.cxx 
b/extensions/source/propctrlr/propertyhandler.cxx
index a1817393324f..6c1215524fd2 100644
--- a/extensions/source/propctrlr/propertyhandler.cxx
+++ b/extensions/source/propctrlr/propertyhandler.cxx
@@ -79,11 +79,11 @@ namespace pcr
             return;
 
         // remove all old property change listeners
-        ::comphelper::OInterfaceIteratorHelper2 removeListener = 
m_aPropertyListeners.createIterator();
-        ::comphelper::OInterfaceIteratorHelper2 readdListener = 
m_aPropertyListeners.createIterator();  // will copy the container as needed
+        ::comphelper::OInterfaceIteratorHelper3 
removeListener(m_aPropertyListeners);
+        ::comphelper::OInterfaceIteratorHelper3 
readdListener(m_aPropertyListeners);  // will copy the container as needed
         while ( removeListener.hasMoreElements() )
-            removePropertyChangeListener( static_cast< 
XPropertyChangeListener* >( removeListener.next() ) );
-        OSL_ENSURE( m_aPropertyListeners.empty(), "PropertyHandler::inspect: 
derived classes are expected to forward the removePropertyChangeListener call 
to their base class (me)!" );
+            removePropertyChangeListener( removeListener.next() );
+        OSL_ENSURE( m_aPropertyListeners.getLength() == 0, 
"PropertyHandler::inspect: derived classes are expected to forward the 
removePropertyChangeListener call to their base class (me)!" );
 
         // remember the new component, and give derived classes the chance to 
react on it
         m_xComponent = xNewComponent;
@@ -91,7 +91,7 @@ namespace pcr
 
         // add the listeners, again
         while ( readdListener.hasMoreElements() )
-            addPropertyChangeListener( static_cast< XPropertyChangeListener* 
>( readdListener.next() ) );
+            addPropertyChangeListener( readdListener.next() );
     }
 
     void PropertyHandler::onNewComponent()
@@ -228,13 +228,13 @@ namespace pcr
         ::osl::MutexGuard aGuard( m_aMutex );
         if ( !_rxListener.is() )
             throw NullPointerException();
-        m_aPropertyListeners.addListener( _rxListener );
+        m_aPropertyListeners.addInterface( _rxListener );
     }
 
     void SAL_CALL PropertyHandler::removePropertyChangeListener( const 
Reference< XPropertyChangeListener >& _rxListener )
     {
         ::osl::MutexGuard aGuard( m_aMutex );
-        m_aPropertyListeners.removeListener( _rxListener );
+        m_aPropertyListeners.removeInterface( _rxListener );
     }
 
     sal_Bool SAL_CALL PropertyHandler::suspend( sal_Bool /*_bSuspend*/ )
@@ -260,7 +260,7 @@ namespace pcr
         aEvent.PropertyName = _rPropName;
         aEvent.OldValue = _rOldValue;
         aEvent.NewValue = _rNewValue;
-        m_aPropertyListeners.notify( aEvent, 
&XPropertyChangeListener::propertyChange );
+        m_aPropertyListeners.notifyEach( 
&XPropertyChangeListener::propertyChange, aEvent );
     }
 
     const Property* PropertyHandler::impl_getPropertyFromId_nothrow( 
PropertyId _nPropId ) const
diff --git a/forms/Library_frm.mk b/forms/Library_frm.mk
index 834a2a4eb91f..5739c28c0c80 100644
--- a/forms/Library_frm.mk
+++ b/forms/Library_frm.mk
@@ -106,7 +106,6 @@ $(eval $(call gb_Library_add_exception_objects,frm,\
     forms/source/misc/componenttools \
     forms/source/misc/InterfaceContainer \
     forms/source/misc/limitedformats \
-    forms/source/misc/listenercontainers \
     forms/source/misc/property \
     forms/source/resource/frm_resource \
     forms/source/richtext/attributedispatcher \
diff --git a/forms/source/component/DatabaseForm.cxx 
b/forms/source/component/DatabaseForm.cxx
index c9281843326c..3aefbd798ade 100644
--- a/forms/source/component/DatabaseForm.cxx
+++ b/forms/source/component/DatabaseForm.cxx
@@ -229,7 +229,7 @@ ODatabaseForm::ODatabaseForm(const 
Reference<XComponentContext>& _rxContext)
     ,m_aRowSetApproveListeners(m_aMutex)
     ,m_aSubmitListeners(m_aMutex)
     ,m_aErrorListeners(m_aMutex)
-    ,m_aResetListeners( *this, m_aMutex )
+    ,m_aResetListeners(m_aMutex)
     ,m_aPropertyBagHelper( *this )
     ,m_aParameterManager( m_aMutex, _rxContext )
     ,m_aFilterManager()
@@ -263,7 +263,7 @@ ODatabaseForm::ODatabaseForm( const ODatabaseForm& 
_cloneSource )
     ,m_aRowSetApproveListeners( m_aMutex )
     ,m_aSubmitListeners( m_aMutex )
     ,m_aErrorListeners( m_aMutex )
-    ,m_aResetListeners( *this, m_aMutex )
+    ,m_aResetListeners( m_aMutex )
     ,m_aPropertyBagHelper( *this )
     ,m_aParameterManager( m_aMutex, _cloneSource.m_xContext )
     ,m_aFilterManager()
@@ -1220,7 +1220,7 @@ void ODatabaseForm::disposing()
     EventObject aEvt(static_cast<XWeak*>(this));
     m_aLoadListeners.disposeAndClear(aEvt);
     m_aRowSetApproveListeners.disposeAndClear(aEvt);
-    m_aResetListeners.disposing();
+    m_aResetListeners.disposeAndClear(aEvt);
     m_aSubmitListeners.disposeAndClear(aEvt);
     m_aErrorListeners.disposeAndClear(aEvt);
 
@@ -1893,7 +1893,7 @@ void SAL_CALL ODatabaseForm::reset()
         return;
     }
 
-    if ( !m_aResetListeners.empty() )
+    if ( m_aResetListeners.getLength() )
     {
         ::osl::MutexGuard aResetGuard(m_aResetSafety);
         ++m_nResetsPending;
@@ -1921,8 +1921,13 @@ void SAL_CALL ODatabaseForm::reset()
 void ODatabaseForm::reset_impl(bool _bApproveByListeners)
 {
     if ( _bApproveByListeners )
-        if ( !m_aResetListeners.approveReset() )
-            return;
+    {
+        ::comphelper::OInterfaceIteratorHelper3 aIter(m_aResetListeners);
+        EventObject aEvent(*this);
+        while (aIter.hasMoreElements())
+            if (!aIter.next()->approveReset(aEvent))
+                return;
+    }
 
     ::osl::ResettableMutexGuard aResetGuard(m_aResetSafety);
     // do we have a database connected form and stay on the insert row
@@ -2026,7 +2031,8 @@ void ODatabaseForm::reset_impl(bool _bApproveByListeners)
 
     aResetGuard.clear();
     {
-        m_aResetListeners.resetted();
+        css::lang::EventObject aEvent( *this );
+        m_aResetListeners.notifyEach(&css::form::XResetListener::resetted, 
aEvent);
     }
 
     aResetGuard.reset();
@@ -2041,13 +2047,13 @@ void ODatabaseForm::reset_impl(bool 
_bApproveByListeners)
 
 void SAL_CALL ODatabaseForm::addResetListener(const Reference<XResetListener>& 
_rListener)
 {
-    m_aResetListeners.addTypedListener( _rListener );
+    m_aResetListeners.addInterface( _rListener );
 }
 
 
 void SAL_CALL ODatabaseForm::removeResetListener(const 
Reference<XResetListener>& _rListener)
 {
-    m_aResetListeners.removeTypedListener( _rListener );
+    m_aResetListeners.removeInterface( _rListener );
 }
 
 
diff --git a/forms/source/component/DatabaseForm.hxx 
b/forms/source/component/DatabaseForm.hxx
index a0ad6e3b86ae..7d6b86e03277 100644
--- a/forms/source/component/DatabaseForm.hxx
+++ b/forms/source/component/DatabaseForm.hxx
@@ -62,7 +62,6 @@
 #include <connectivity/filtermanager.hxx>
 #include <connectivity/warningscontainer.hxx>
 
-#include <listenercontainers.hxx>
 #include <comphelper/interfacecontainer3.hxx>
 #include <comphelper/propmultiplex.hxx>
 #include <comphelper/uno3.hxx>
@@ -154,7 +153,7 @@ class ODatabaseForm :public OFormComponents
     ::comphelper::OInterfaceContainerHelper3<css::sdb::XRowSetApproveListener> 
  m_aRowSetApproveListeners;
     ::comphelper::OInterfaceContainerHelper3<css::form::XSubmitListener>   
m_aSubmitListeners;
     ::comphelper::OInterfaceContainerHelper3<css::sdb::XSQLErrorListener>   
m_aErrorListeners;
-    ResetListeners                      m_aResetListeners;
+    ::comphelper::OInterfaceContainerHelper3<css::form::XResetListener> 
m_aResetListeners;
     ::osl::Mutex                        m_aResetSafety;
     css::uno::Any                       m_aCycle;
     css::uno::Any                       m_aIgnoreResult; // set when we are a 
subform and our master form positioned on a new row
diff --git a/forms/source/inc/listenercontainers.hxx 
b/forms/source/inc/listenercontainers.hxx
deleted file mode 100644
index f7b0cbb88579..000000000000
--- a/forms/source/inc/listenercontainers.hxx
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <com/sun/star/form/XResetListener.hpp>
-#include <comphelper/listenernotification.hxx>
-#include <cppuhelper/weak.hxx>
-
-
-namespace frm
-{
-
-    template < class LISTENER >
-    class EventListeners : public ::comphelper::OListenerContainerBase< 
LISTENER, css::lang::EventObject >
-    {
-    public:
-        typedef ::comphelper::OListenerContainerBase< LISTENER, 
css::lang::EventObject >
-                                                    EventListeners_Base;
-
-    private:
-        ::cppu::OWeakObject&    m_rInstigator;
-
-    protected:
-        EventListeners( ::cppu::OWeakObject& _rInstigator, ::osl::Mutex& 
_rMutex )
-            :EventListeners_Base( _rMutex )
-            ,m_rInstigator( _rInstigator )
-        {
-        }
-
-    public:
-        bool notify()
-        {
-            css::lang::EventObject aEvent( m_rInstigator );
-            return EventListeners_Base::notify( aEvent );
-        }
-
-        void disposing()
-        {
-            css::lang::EventObject aEvent( m_rInstigator );
-            EventListeners_Base::disposing( aEvent );
-        }
-    protected:
-        using EventListeners_Base::notify;
-        using EventListeners_Base::disposing;
-    };
-
-    typedef EventListeners  <   css::form::XResetListener
-                            >   ResetListeners_Base;
-    class ResetListeners : public ResetListeners_Base
-    {
-    private:
-        enum NotificationType
-        {
-            eApproval,
-            eFinal
-        };
-        NotificationType        m_eCurrentNotificationType;
-
-    public:
-        ResetListeners( ::cppu::OWeakObject& _rInstigator, ::osl::Mutex& 
_rMutex )
-            :ResetListeners_Base( _rInstigator, _rMutex )
-            ,m_eCurrentNotificationType( eApproval )
-        {
-        }
-
-        /** see whether all our listeners approve the reset
-        */
-        bool approveReset()
-        {
-            m_eCurrentNotificationType = eApproval;
-            return notify();
-        }
-
-        /** tell all our listeners that the reset happened
-        */
-        void resetted()
-        {
-            m_eCurrentNotificationType = eFinal;
-            notify();
-        }
-
-    protected:
-        virtual bool    implTypedNotify(
-                            const css::uno::Reference< 
css::form::XResetListener >& _rxListener,
-                            const css::lang::EventObject& _rEvent
-                        ) override;
-    };
-
-
-} // namespace frm
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/forms/source/misc/listenercontainers.cxx 
b/forms/source/misc/listenercontainers.cxx
deleted file mode 100644
index 13adf3e612ad..000000000000
--- a/forms/source/misc/listenercontainers.cxx
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <listenercontainers.hxx>
-#include <osl/diagnose.h>
-
-
-namespace frm
-{
-
-
-    using namespace ::com::sun::star::uno;
-    using namespace ::com::sun::star::lang;
-    using namespace ::com::sun::star::form;
-
-
-    //= ResetListeners
-
-
-    bool ResetListeners::implTypedNotify( const Reference< XResetListener >& 
_rxListener,
-        const EventObject& _rEvent )
-    {
-        switch ( m_eCurrentNotificationType )
-        {
-        case eApproval:
-            if ( !_rxListener->approveReset( _rEvent ) )
-                return false;
-            return true;
-        case eFinal:
-            _rxListener->resetted( _rEvent );
-            break;
-        default:
-            OSL_FAIL( "ResetListeners::implNotify: invalid notification type!" 
);
-        }
-        return true;
-    }
-
-
-} // namespace frm
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/comphelper/listenernotification.hxx 
b/include/comphelper/listenernotification.hxx
deleted file mode 100644
index 15f1ca64b980..000000000000
--- a/include/comphelper/listenernotification.hxx
+++ /dev/null
@@ -1,266 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_COMPHELPER_LISTENERNOTIFICATION_HXX
-#define INCLUDED_COMPHELPER_LISTENERNOTIFICATION_HXX
-
-#include <comphelper/interfacecontainer2.hxx>
-
-#include <com/sun/star/lang/EventObject.hpp>
-#include <comphelper/comphelperdllapi.h>
-
-#include <memory>
-
-namespace com::sun::star::lang { class XEventListener; }
-
-namespace comphelper
-{
-
-
-    //= OListenerContainer
-
-    /** abstract base class which manages a listener container, including
-        THB's listener notification pattern which cares for removing listeners
-        which throw a DisposedException upon notification
-
-        Using this class is pretty easy:
-        <ul>
-            <li>Derive from it, and overwrite implNotify.</li>
-            <li>Use <member>impl_addListener</member> and 
<member>impl_removeListener</member> in your
-                XFoo::addFooListener and XFoo::removeFooListener methods.</li>
-            <li>call <member>impl_notify</member> whenever the event you want 
to notify happened</li>
-            <li>call <member>disposing</member> upon the disposal of your 
broadcaster.</li>
-        </ul>
-
-        See OListenerContainerBase for an implementation which even saves
-        you some more work, by doing the casts for you.
-
-        @see 
http://www.openoffice.org/servlets/ReadMsg?list=interface-announce&msgId=494345
-        @see OListenerContainerBase
-    */
-    class COMPHELPER_DLLPUBLIC OListenerContainer
-    {
-    private:
-        ::comphelper::OInterfaceContainerHelper2    m_aListeners;
-
-    public:
-        /** sends a XEventObject::disposing notification to all listeners, and 
clears the
-            listener container
-
-            You'll usually call this from within your own dispose/disposing 
method
-        */
-        void    disposing( const css::lang::EventObject& _rEventSource );
-
-        /** clears the container without calling <member 
scope="css::lang">XEventListener::disposing</member>
-            at the listeners
-        */
-        void    clear();
-
-        /** determines whether the listener container is currently empty
-        */
-        inline bool
-                empty() const;
-
-        /** creates an iterator for looping through all registered listeners
-        */
-        ::comphelper::OInterfaceIteratorHelper2 createIterator()
-        {
-            return ::comphelper::OInterfaceIteratorHelper2( m_aListeners );
-        }
-
-    protected:
-                OListenerContainer( ::osl::Mutex& _rMutex );
-
-        virtual ~OListenerContainer();
-
-        void    impl_addListener( const css::uno::Reference< 
css::lang::XEventListener >& _rxListener );
-        void    impl_removeListener( const css::uno::Reference< 
css::lang::XEventListener >& _rxListener );
-
-        /** notifies all listeners of the given event, using THB's 
notification pattern
-
-            internally, this method will call <member>implNotify</member> for 
every listener
-
-            @return
-                <TRUE/> if all listeners have been notified, <FALSE/> else. 
The latter can happen
-                if <member>implNotify</member> cancels the notification loop.
-
-            @see implNotify
-        */
-        bool    impl_notify( const css::lang::EventObject& _rEvent );
-
-    protected:
-        /** call a single listener
-
-            @pure
-
-            @throws css::uno::Exception
-                if the listener throws an exception during notification. 
Please don't catch
-                any listener exceptions in your implementation of this method, 
simply let them
-                pass to the caller.
-
-            @param _rxListener
-                specifies the listener to call. Is guaranteed to not be <NULL/>
-            @param _rEvent
-                the event to broadcast. This is the same as passed to 
<member>notify</member>, so if
-                your base class knows the type passed into 
<member>notify</member>, it can safely assume
-                that <arg>_rEvent</arg> is also of this type.
-
-            @return
-                <TRUE/> if the remaining listeners should be called, <FALSE/> 
if the notification
-                loop should be cancelled
-
-            @see notify
-        */
-        virtual bool    implNotify(
-                            const css::uno::Reference< 
css::lang::XEventListener >& _rxListener,
-                            const css::lang::EventObject& _rEvent
-                        ) = 0;
-    };
-
-
-    inline bool OListenerContainer::empty() const
-    {
-        return ( m_aListeners.getLength() == 0 );
-    }
-
-
-    //= OSimpleListenerContainer
-
-    /** helper class for simple notification of the form LISTENER::METHOD( 
EVENT )
-
-        This class is not threadsafe!
-
-        @param LISTENER
-            the listener class to call, e.g. css::lang::XEventListener
-        @param EVENT
-            the event type to notify, e.g. css::lang::EventObject
-    */
-    template< class LISTENER, class EVENT >
-    class OSimpleListenerContainer final : protected OListenerContainer
-    {
-    public:
-        typedef LISTENER    ListenerClass;
-        typedef EVENT       EventClass;
-        typedef void ( SAL_CALL LISTENER::*NotificationMethod )( const 
EventClass& );
-
-    private:
-        NotificationMethod  m_pNotificationMethod;
-
-    public:
-        OSimpleListenerContainer( ::osl::Mutex& _rMutex )
-            :OListenerContainer( _rMutex )
-            ,m_pNotificationMethod( nullptr )
-        {
-        }
-
-        void addListener( const css::uno::Reference< ListenerClass >& 
_rxListener )
-        {
-            OListenerContainer::impl_addListener( _rxListener.get() );
-        }
-
-        void removeListener( const css::uno::Reference< ListenerClass >& 
_rxListener )
-        {
-            OListenerContainer::impl_removeListener( _rxListener.get() );
-        }
-
-        // publish some otherwise hidden base functionality
-        using OListenerContainer::disposing;
-        using OListenerContainer::clear;
-        using OListenerContainer::empty;
-        using OListenerContainer::createIterator;
-
-        /// typed notification
-        inline void    notify( const EventClass& _rEvent, NotificationMethod 
_pNotify );
-
-    private:
-        virtual bool    implNotify(
-                            const css::uno::Reference< 
css::lang::XEventListener >& _rxListener,
-                            const css::lang::EventObject& _rEvent
-                        ) override
-        {
-            const EventClass& rTypedEvent( static_cast< const EventClass& >( 
_rEvent ) );
-            ListenerClass* pTypedListener( static_cast< ListenerClass* >( 
_rxListener.get() ) );
-            (pTypedListener->*m_pNotificationMethod)( rTypedEvent );
-            return true;
-        }
-    };
-
-
-    template< class LISTENER, class EVENT >
-    inline void OSimpleListenerContainer< LISTENER, EVENT >::notify( const 
EventClass& _rEvent, NotificationMethod _pNotify )
-    {
-        m_pNotificationMethod = _pNotify;
-        OListenerContainer::impl_notify( _rEvent );
-        m_pNotificationMethod = nullptr;
-    }
-
-    //= OListenerContainerBase
-
-    /** is a specialization of OListenerContainer which saves you some 
additional type casts,
-        by making the required listener and event types template arguments.
-    */
-    template< class ListenerClass, class EventClass >
-    class OListenerContainerBase : public OListenerContainer
-    {
-    public:
-        OListenerContainerBase( ::osl::Mutex& _rMutex ) : OListenerContainer( 
_rMutex )
-        {
-        }
-
-        void addTypedListener( const css::uno::Reference< ListenerClass >& 
_rxListener )
-        {
-            OListenerContainer::impl_addListener( _rxListener.get() );
-        }
-
-        void removeTypedListener( const css::uno::Reference< ListenerClass >& 
_rxListener )
-        {
-            OListenerContainer::impl_removeListener( _rxListener.get() );
-        }
-
-        bool notify( const EventClass& _rEvent )
-        {
-            return OListenerContainer::impl_notify( _rEvent );
-        }
-
-        using OListenerContainer::impl_notify;
-
-    protected:
-        virtual bool    implNotify(
-                            const css::uno::Reference< 
css::lang::XEventListener >& _rxListener,
-                            const css::lang::EventObject& _rEvent
-                        ) override
-        {
-            return implTypedNotify(
-                css::uno::Reference< ListenerClass >( static_cast< 
ListenerClass* >( _rxListener.get() ) ),
-                static_cast< const EventClass& >( _rEvent )
-            );
-        }
-
-        virtual bool    implTypedNotify(
-                            const css::uno::Reference< ListenerClass >& 
_rxListener,
-                            const EventClass& _rEvent
-                        ) = 0;
-    };
-
-} // namespace comphelper
-
-
-#endif // INCLUDED_COMPHELPER_LISTENERNOTIFICATION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/ui/inc/GeometryHandler.hxx 
b/reportdesign/source/ui/inc/GeometryHandler.hxx
index 79fb54433238..13d08414c482 100644
--- a/reportdesign/source/ui/inc/GeometryHandler.hxx
+++ b/reportdesign/source/ui/inc/GeometryHandler.hxx
@@ -38,8 +38,8 @@
 #include <memory>
 #include <string_view>
 
+#include <comphelper/interfacecontainer3.hxx>
 #include <comphelper/stl_types.hxx>
-#include <comphelper/listenernotification.hxx>
 
 
 namespace rptui
@@ -60,9 +60,7 @@ namespace rptui
     class OPropertyInfoService;
     typedef ::std::pair< css::uno::Reference< css::report::XFunction>, 
css::uno::Reference< css::report::XFunctionsSupplier> > TFunctionPair;
     typedef ::std::multimap< OUString,TFunctionPair, 
::comphelper::UStringMixLess > TFunctions;
-    typedef ::comphelper::OSimpleListenerContainer  <   
css::beans::XPropertyChangeListener
-                                                    ,   
css::beans::PropertyChangeEvent
-                                                    >   
PropertyChangeListeners;
+    typedef ::comphelper::OInterfaceContainerHelper3< 
css::beans::XPropertyChangeListener >   PropertyChangeListeners;
     typedef ::cppu::WeakComponentImplHelper<   
css::inspection::XPropertyHandler
                                             ,   
css::beans::XPropertyChangeListener
                                             ,   css::lang::XServiceInfo> 
GeometryHandler_Base;
diff --git a/reportdesign/source/ui/inspection/GeometryHandler.cxx 
b/reportdesign/source/ui/inspection/GeometryHandler.cxx
index 26a7878cc0ab..4dd7ac4df9c7 100644
--- a/reportdesign/source/ui/inspection/GeometryHandler.cxx
+++ b/reportdesign/source/ui/inspection/GeometryHandler.cxx
@@ -488,7 +488,7 @@ void SAL_CALL GeometryHandler::setPropertyValue(const 
OUString & PropertyName, c
                         m_sScope.clear();
                         aEvent.NewValue <<= m_sScope;
                         aGuard.clear();
-                        m_aPropertyListeners.notify( aEvent, 
&beans::XPropertyChangeListener::propertyChange );
+                        m_aPropertyListeners.notifyEach( 
&beans::XPropertyChangeListener::propertyChange, aEvent );
                     }
                     else if ( m_nDataFieldType == USER_DEF_FUNCTION )
                     {
@@ -1242,14 +1242,14 @@ uno::Any SAL_CALL 
GeometryHandler::convertToControlValue(const OUString & Proper
 void SAL_CALL GeometryHandler::addPropertyChangeListener(const uno::Reference< 
beans::XPropertyChangeListener > & _rxListener)
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    m_aPropertyListeners.addListener( _rxListener );
+    m_aPropertyListeners.addInterface( _rxListener );
     m_xFormComponentHandler->addPropertyChangeListener(_rxListener);
 }
 
 void SAL_CALL GeometryHandler::removePropertyChangeListener(const 
uno::Reference< beans::XPropertyChangeListener > & _rxListener)
 {
     ::osl::MutexGuard aGuard( m_aMutex );
-    m_aPropertyListeners.removeListener( _rxListener );
+    m_aPropertyListeners.removeInterface( _rxListener );
     m_xFormComponentHandler->removePropertyChangeListener(_rxListener);
 }
 
@@ -1444,7 +1444,7 @@ inspection::InteractiveSelectionResult SAL_CALL 
GeometryHandler::onInteractivePr
             beans::PropertyChangeEvent aScopeEvent;
             aScopeEvent.PropertyName = PROPERTY_FILLCOLOR;
             aScopeEvent.NewValue = 
xShape->getPropertyValue(PROPERTY_FILLCOLOR);
-            m_aPropertyListeners.notify( aScopeEvent, 
&beans::XPropertyChangeListener::propertyChange );
+            m_aPropertyListeners.notifyEach( 
&beans::XPropertyChangeListener::propertyChange, aScopeEvent );
         }
         return eResult;
     }
@@ -1954,7 +1954,7 @@ void 
GeometryHandler::createDefaultFunction(::osl::ResettableMutexGuard& _aGuard
             
m_xReportComponent->setPropertyValue(PROPERTY_DATAFIELD,uno::makeAny( 
impl_convertToFormula( uno::makeAny(sQuotedFunctionName) )));
             aEvent.NewValue <<= m_sScope;
             _aGuard.clear();
-            m_aPropertyListeners.notify( aEvent, 
&beans::XPropertyChangeListener::propertyChange );
+            m_aPropertyListeners.notifyEach( 
&beans::XPropertyChangeListener::propertyChange, aEvent );
         }
     }
     catch(uno::Exception&)
@@ -1996,7 +1996,7 @@ void 
GeometryHandler::resetOwnProperties(::osl::ResettableMutexGuard& _aGuard,co
         aScopeEvent.PropertyName = PROPERTY_TYPE;
         aScopeEvent.OldValue <<= _nOldDataFieldType;
         aScopeEvent.NewValue <<= nNewDataFieldType;
-        m_aPropertyListeners.notify( aScopeEvent, 
&beans::XPropertyChangeListener::propertyChange );
+        m_aPropertyListeners.notifyEach( 
&beans::XPropertyChangeListener::propertyChange, aScopeEvent );
     }
     if ( _sOldFunctionName != sNewFunction )
     {
@@ -2005,7 +2005,7 @@ void 
GeometryHandler::resetOwnProperties(::osl::ResettableMutexGuard& _aGuard,co
         aFormulaEvent.OldValue <<= _sOldFunctionName;
         aFormulaEvent.NewValue <<= sNewFunction;
 
-        m_aPropertyListeners.notify( aFormulaEvent, 
&beans::XPropertyChangeListener::propertyChange );
+        m_aPropertyListeners.notifyEach( 
&beans::XPropertyChangeListener::propertyChange, aFormulaEvent );
     }
     if ( _sOldScope != sNewScope )
     {
@@ -2013,7 +2013,7 @@ void 
GeometryHandler::resetOwnProperties(::osl::ResettableMutexGuard& _aGuard,co
         aScopeEvent.PropertyName = PROPERTY_SCOPE;
         aScopeEvent.OldValue <<= _sOldScope;
         aScopeEvent.NewValue <<= sNewScope;
-        m_aPropertyListeners.notify( aScopeEvent, 
&beans::XPropertyChangeListener::propertyChange );
+        m_aPropertyListeners.notifyEach( 
&beans::XPropertyChangeListener::propertyChange, aScopeEvent );
     }
 
     _aGuard.reset();
diff --git a/sd/source/ui/slideshow/slideshowviewimpl.cxx 
b/sd/source/ui/slideshow/slideshowviewimpl.cxx
index d0829f8f1e8f..c8935469ed95 100644
--- a/sd/source/ui/slideshow/slideshowviewimpl.cxx
+++ b/sd/source/ui/slideshow/slideshowviewimpl.cxx
@@ -109,71 +109,49 @@ void SlideShowViewListeners::disposing( const 
lang::EventObject& _rEventSource )
     maListeners.clear();
 }
 
-// SlideShowViewPaintListeners
-SlideShowViewPaintListeners::SlideShowViewPaintListeners( ::osl::Mutex& rMutex 
)
-:   SlideShowViewPaintListeners_Base( rMutex )
+void SlideShowViewMouseListeners::notify( const WrappedMouseEvent& rEvent )
 {
-}
-
-bool SlideShowViewPaintListeners::implTypedNotify( const Reference< 
awt::XPaintListener >& rListener,
-                                              const awt::PaintEvent&           
       rEvent )
-{
-    rListener->windowPaint( rEvent );
-    return true; // continue calling listeners
-}
-
-// SlideShowViewMouseListeners
-SlideShowViewMouseListeners::SlideShowViewMouseListeners( ::osl::Mutex& rMutex 
) :
-    SlideShowViewMouseListeners_Base( rMutex )
-{
-}
-
-bool SlideShowViewMouseListeners::implTypedNotify( const Reference< 
awt::XMouseListener >&  rListener,
-                                              const WrappedMouseEvent&         
         rEvent )
-{
-    switch( rEvent.meType )
-    {
-        case WrappedMouseEvent::PRESSED:
-            rListener->mousePressed( rEvent.maEvent );
-            break;
-
-        case WrappedMouseEvent::RELEASED:
-            rListener->mouseReleased( rEvent.maEvent );
-            break;
+    forEach(
+        [&rEvent] (const Reference<css::awt::XMouseListener>& rListener)
+        {
+            switch( rEvent.meType )
+            {
+                case WrappedMouseEvent::PRESSED:
+                    rListener->mousePressed( rEvent.maEvent );
+                    break;
 
-        case WrappedMouseEvent::ENTERED:
-            rListener->mouseEntered( rEvent.maEvent );
-            break;
+                case WrappedMouseEvent::RELEASED:
+                    rListener->mouseReleased( rEvent.maEvent );
+                    break;
 
-        case WrappedMouseEvent::EXITED:
-            rListener->mouseExited( rEvent.maEvent );
-            break;
-    }
+                case WrappedMouseEvent::ENTERED:
+                    rListener->mouseEntered( rEvent.maEvent );
+                    break;
 
-    return true; // continue calling listeners
+                case WrappedMouseEvent::EXITED:
+                    rListener->mouseExited( rEvent.maEvent );
+                    break;
+            }
+        });
 }
 
-// SlideShowViewMouseMotionListeners
-SlideShowViewMouseMotionListeners::SlideShowViewMouseMotionListeners( 
::osl::Mutex& rMutex ) :
-    SlideShowViewMouseMotionListeners_Base( rMutex )
-{
-}
 
-bool SlideShowViewMouseMotionListeners::implTypedNotify( const Reference< 
awt::XMouseMotionListener >&  rListener,
-                                                    const 
WrappedMouseMotionEvent&                  rEvent )
+void SlideShowViewMouseMotionListeners::notify( const WrappedMouseMotionEvent& 
rEvent )
 {
-    switch( rEvent.meType )
-    {
-        case WrappedMouseMotionEvent::DRAGGED:
-            rListener->mouseDragged( rEvent.maEvent );
-            break;
-
-        case WrappedMouseMotionEvent::MOVED:
-            rListener->mouseMoved( rEvent.maEvent );
-            break;
-    }
+    forEach(
+        [&rEvent] (const Reference< awt::XMouseMotionListener >&  rListener)
+        {
+            switch( rEvent.meType )
+            {
+                case WrappedMouseMotionEvent::DRAGGED:
+                    rListener->mouseDragged( rEvent.maEvent );
+                    break;
 
-    return true; // continue calling listeners
+                case WrappedMouseMotionEvent::MOVED:
+                    rListener->mouseMoved( rEvent.maEvent );
+                    break;
+            }
+        });
 }
 
 // SlideShowView
@@ -247,17 +225,17 @@ void SAL_CALL SlideShowView::disposing( const 
lang::EventObject& )
     }
     if (mpPaintListeners != nullptr)
     {
-        mpPaintListeners->disposing( evt );
+        mpPaintListeners->disposeAndClear( evt );
         mpPaintListeners.reset();
     }
     if (mpMouseListeners != nullptr)
     {
-        mpMouseListeners->disposing( evt );
+        mpMouseListeners->disposeAndClear( evt );
         mpMouseListeners.reset();
     }
     if (mpMouseMotionListeners != nullptr)
     {
-        mpMouseMotionListeners->disposing( evt );
+        mpMouseMotionListeners->disposeAndClear( evt );
         mpMouseMotionListeners.reset();
     }
 }
@@ -280,7 +258,7 @@ void SlideShowView::paint( const awt::PaintEvent& e )
         // with view
         awt::PaintEvent aEvent( e );
         aEvent.Source = static_cast< ::cppu::OWeakObject* >( this );
-        mpPaintListeners->notify( aEvent );
+        mpPaintListeners->notifyEach( &css::awt::XPaintListener::windowPaint, 
aEvent );
         updateimpl( aGuard, mpSlideShow ); // warning: clears guard!
     }
 }
@@ -401,7 +379,7 @@ void SAL_CALL SlideShowView::addPaintListener( const 
Reference< awt::XPaintListe
     ::osl::MutexGuard aGuard( m_aMutex );
 
     if (mpPaintListeners)
-        mpPaintListeners->addTypedListener( xListener );
+        mpPaintListeners->addInterface( xListener );
 }
 
 void SAL_CALL SlideShowView::removePaintListener( const Reference< 
awt::XPaintListener >& xListener )
@@ -409,7 +387,7 @@ void SAL_CALL SlideShowView::removePaintListener( const 
Reference< awt::XPaintLi
     ::osl::MutexGuard aGuard( m_aMutex );
 
     if (mpPaintListeners)
-        mpPaintListeners->removeTypedListener( xListener );
+        mpPaintListeners->removeInterface( xListener );
 }
 
 void SAL_CALL SlideShowView::addMouseListener( const Reference< 
awt::XMouseListener >& xListener )
@@ -417,7 +395,7 @@ void SAL_CALL SlideShowView::addMouseListener( const 
Reference< awt::XMouseListe
     ::osl::MutexGuard aGuard( m_aMutex );
 
     if (mpMouseListeners)
-        mpMouseListeners->addTypedListener( xListener );
+        mpMouseListeners->addInterface( xListener );
 }
 
 void SAL_CALL SlideShowView::removeMouseListener( const Reference< 
awt::XMouseListener >& xListener )
@@ -425,7 +403,7 @@ void SAL_CALL SlideShowView::removeMouseListener( const 
Reference< awt::XMouseLi
     ::osl::MutexGuard aGuard( m_aMutex );
 
     if (mpMouseListeners)
-        mpMouseListeners->removeTypedListener( xListener );
+        mpMouseListeners->removeInterface( xListener );
 }
 
 void SAL_CALL SlideShowView::addMouseMotionListener( const Reference< 
awt::XMouseMotionListener >& xListener )
@@ -441,7 +419,7 @@ void SAL_CALL SlideShowView::addMouseMotionListener( const 
Reference< awt::XMous
     }
 
     if (mpMouseMotionListeners)
-        mpMouseMotionListeners->addTypedListener( xListener );
+        mpMouseMotionListeners->addInterface( xListener );
 }
 
 void SAL_CALL SlideShowView::removeMouseMotionListener( const Reference< 
awt::XMouseMotionListener >& xListener )
@@ -449,7 +427,7 @@ void SAL_CALL SlideShowView::removeMouseMotionListener( 
const Reference< awt::XM
     ::osl::MutexGuard aGuard( m_aMutex );
 
     if (mpMouseMotionListeners)
-        mpMouseMotionListeners->removeTypedListener( xListener );
+        mpMouseMotionListeners->removeInterface( xListener );
 
     // TODO(P1): Might be nice to deregister for mouse motion
     // events, when the last listener is gone.
diff --git a/sd/source/ui/slideshow/slideshowviewimpl.hxx 
b/sd/source/ui/slideshow/slideshowviewimpl.hxx
index 85e433107c45..0f090ed13d03 100644
--- a/sd/source/ui/slideshow/slideshowviewimpl.hxx
+++ b/sd/source/ui/slideshow/slideshowviewimpl.hxx
@@ -22,7 +22,7 @@
 #include <memory>
 #include <cppuhelper/compbase.hxx>
 #include <cppuhelper/basemutex.hxx>
-#include <comphelper/listenernotification.hxx>
+#include <comphelper/interfacecontainer3.hxx>
 #include <com/sun/star/awt/XWindowListener.hpp>
 #include <com/sun/star/util/XModifyListener.hpp>
 #include <com/sun/star/awt/XPaintListener.hpp>
@@ -86,44 +86,30 @@ private:
 };
 
 // SlideShowViewPaintListeners
-typedef ::comphelper::OListenerContainerBase< css::awt::XPaintListener,
-                                                css::awt::PaintEvent >         
SlideShowViewPaintListeners_Base;
+typedef ::comphelper::OInterfaceContainerHelper3< css::awt::XPaintListener >  
SlideShowViewPaintListeners;
 
-class SlideShowViewPaintListeners : public SlideShowViewPaintListeners_Base
-{
-public:
-    SlideShowViewPaintListeners( ::osl::Mutex& rMutex );
-
-protected:
-    virtual bool implTypedNotify( const css::uno::Reference< 
css::awt::XPaintListener >& rListener, const css::awt::PaintEvent& rEvent ) 
override;
-};
 
 // SlideShowViewMouseListeners
-typedef ::comphelper::OListenerContainerBase< css::awt::XMouseListener, 
WrappedMouseEvent > SlideShowViewMouseListeners_Base;
+typedef ::comphelper::OInterfaceContainerHelper3< css::awt::XMouseListener > 
SlideShowViewMouseListeners_Base;
 
 class SlideShowViewMouseListeners : public SlideShowViewMouseListeners_Base
 {
 public:
-    SlideShowViewMouseListeners( ::osl::Mutex& rMutex );
+    SlideShowViewMouseListeners( ::osl::Mutex& rMutex ) : 
SlideShowViewMouseListeners_Base(rMutex) {}
 
-protected:
-    virtual bool implTypedNotify( const css::uno::Reference< 
css::awt::XMouseListener >&  rListener,
-                             const WrappedMouseEvent&                   rEvent 
) override;
+    void notify(const WrappedMouseEvent& rEvent);
 };
 
 
 // SlideShowViewMouseMotionListeners
-typedef ::comphelper::OListenerContainerBase< css::awt::XMouseMotionListener,
-                                                WrappedMouseMotionEvent > 
SlideShowViewMouseMotionListeners_Base;
+typedef ::comphelper::OInterfaceContainerHelper3< 
css::awt::XMouseMotionListener > SlideShowViewMouseMotionListeners_Base;
 
 class SlideShowViewMouseMotionListeners : public 
SlideShowViewMouseMotionListeners_Base
 {
 public:
-    SlideShowViewMouseMotionListeners( ::osl::Mutex& rMutex );
+    SlideShowViewMouseMotionListeners( ::osl::Mutex& rMutex ) : 
SlideShowViewMouseMotionListeners_Base(rMutex) {}
 
-protected:
-    virtual bool implTypedNotify( const css::uno::Reference< 
css::awt::XMouseMotionListener >&    rListener,
-                             const WrappedMouseMotionEvent&                 
rEvent ) override;
+    void notify( const WrappedMouseMotionEvent& rEvent );
 };
 
 // SlideShowView
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 2448a00b08f9..0c2f856a2187 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -1398,7 +1398,6 @@ comphelper/source/misc/hash.cxx
 comphelper/source/misc/instancelocker.cxx
 comphelper/source/misc/instancelocker.hxx
 comphelper/source/misc/interaction.cxx
-comphelper/source/misc/listenernotification.cxx
 comphelper/source/misc/logging.cxx
 comphelper/source/misc/lok.cxx
 comphelper/source/misc/mimeconfighelper.cxx
@@ -4954,7 +4953,6 @@ include/comphelper/guarding.hxx
 include/comphelper/hash.hxx
 include/comphelper/interaction.hxx
 include/comphelper/interfacecontainer2.hxx
-include/comphelper/listenernotification.hxx
 include/comphelper/logging.hxx
 include/comphelper/mimeconfighelper.hxx
 include/comphelper/namedvaluecollection.hxx

Reply via email to