diff options
-rw-r--r-- | include/svl/broadcast.hxx | 1 | ||||
-rw-r--r-- | svl/source/notify/broadcast.cxx | 8 |
2 files changed, 7 insertions, 2 deletions
diff --git a/include/svl/broadcast.hxx b/include/svl/broadcast.hxx index ab62d488cce6..80d9568b6392 100644 --- a/include/svl/broadcast.hxx +++ b/include/svl/broadcast.hxx @@ -55,6 +55,7 @@ public: private: ListenersType maListeners; + bool mbDying; }; diff --git a/svl/source/notify/broadcast.cxx b/svl/source/notify/broadcast.cxx index 79c17578e25d..7e59e36e2ec7 100644 --- a/svl/source/notify/broadcast.cxx +++ b/svl/source/notify/broadcast.cxx @@ -69,21 +69,25 @@ void SvtBroadcaster::Add( SvtListener* p ) void SvtBroadcaster::Remove( SvtListener* p ) { + if (mbDying) + return; + maListeners.erase(p); if (maListeners.empty()) ListenersGone(); } -SvtBroadcaster::SvtBroadcaster() {} +SvtBroadcaster::SvtBroadcaster() : mbDying(false) {} SvtBroadcaster::SvtBroadcaster( const SvtBroadcaster &rBC ) : - maListeners(rBC.maListeners) + maListeners(rBC.maListeners), mbDying(false) { std::for_each(maListeners.begin(), maListeners.end(), StartListeningHandler(*this)); } SvtBroadcaster::~SvtBroadcaster() { + mbDying = true; Broadcast( SfxSimpleHint(SFX_HINT_DYING) ); // unregister all listeners. |