svl/source/notify/lstner.cxx |   30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

New commits:
commit 611d4819bf190765ea0b8d79b4795ac0f11aa409
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Wed Jan 15 09:23:57 2025 +0100
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Wed Jan 15 16:50:25 2025 +0100

    Simplify a bit
    
    Change-Id: I808db67b749a5e36da63cf791d43cb31d7408876
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180263
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Tested-by: Jenkins

diff --git a/svl/source/notify/lstner.cxx b/svl/source/notify/lstner.cxx
index 2d582c31f998..b1a9a83c907c 100644
--- a/svl/source/notify/lstner.cxx
+++ b/svl/source/notify/lstner.cxx
@@ -47,11 +47,7 @@ SfxListener::SfxListener( const SfxListener &rOther )
 SfxListener::~SfxListener() COVERITY_NOEXCEPT_FALSE
 {
     // unregister at all remaining broadcasters
-    for ( size_t nPos = 0; nPos < maBCs.size(); ++nPos )
-    {
-        SfxBroadcaster *pBC = maBCs[nPos];
-        pBC->RemoveListener(*this);
-    }
+    EndListeningAll();
 }
 
 
@@ -75,7 +71,7 @@ void SfxListener::RemoveBroadcaster_Impl( SfxBroadcaster& 
rBroadcaster )
 */
 void SfxListener::StartListening(SfxBroadcaster& rBroadcaster, 
DuplicateHandling eDuplicateHanding)
 {
-    bool bListeningAlready = IsListening( rBroadcaster );
+    bool bListeningAlready = eDuplicateHanding != DuplicateHandling::Allow && 
IsListening( rBroadcaster );
 
 #ifdef DBG_UTIL
     if (bListeningAlready && eDuplicateHanding == 
DuplicateHandling::Unexpected)
@@ -101,21 +97,17 @@ void SfxListener::StartListening(SfxBroadcaster& 
rBroadcaster, DuplicateHandling
 
 void SfxListener::EndListening( SfxBroadcaster& rBroadcaster, bool 
bRemoveAllDuplicates )
 {
-    auto beginIt = maBCs.begin();
-    do
+    for (auto it = std::find(maBCs.begin(), maBCs.end(), &rBroadcaster); it != 
maBCs.end();
+         it = std::find(it, maBCs.end(), &rBroadcaster))
     {
-        auto it = std::find( beginIt, maBCs.end(), &rBroadcaster );
-        if ( it == maBCs.end() )
-        {
-            break;
-        }
         rBroadcaster.RemoveListener(*this);
-        beginIt = maBCs.erase( it );
+        it = maBCs.erase(it);
+        if (!bRemoveAllDuplicates)
+            break;
+    }
 #ifdef DBG_UTIL
-        maCallStacks.erase( &rBroadcaster );
+    maCallStacks.erase(&rBroadcaster);
 #endif
-    }
-    while ( bRemoveAllDuplicates );
 }
 
 
@@ -123,9 +115,7 @@ void SfxListener::EndListening( SfxBroadcaster& 
rBroadcaster, bool bRemoveAllDup
 
 void SfxListener::EndListeningAll()
 {
-    std::vector<SfxBroadcaster*> aBroadcasters;
-    std::swap(maBCs, aBroadcasters);
-    for (SfxBroadcaster *pBC : aBroadcasters)
+    for (SfxBroadcaster *pBC : std::vector(std::move(maBCs)))
         pBC->RemoveListener(*this);
 #ifdef DBG_UTIL
     maCallStacks.clear();

Reply via email to