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();