diff --git a/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp b/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp index 0b8941c79d..39ad7a58b5 100644 --- a/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp +++ b/modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp @@ -39,6 +39,7 @@ void ChangeBroadcaster::addChangeListener (ChangeListener* const listener) JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED changeListeners.add (listener); + anyListeners = true; } void ChangeBroadcaster::removeChangeListener (ChangeListener* const listener) @@ -48,6 +49,7 @@ void ChangeBroadcaster::removeChangeListener (ChangeListener* const listener) JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED changeListeners.remove (listener); + anyListeners = changeListeners.size() > 0; } void ChangeBroadcaster::removeAllChangeListeners() @@ -57,11 +59,12 @@ void ChangeBroadcaster::removeAllChangeListeners() JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED changeListeners.clear(); + anyListeners = false; } void ChangeBroadcaster::sendChangeMessage() { - if (changeListeners.size() > 0) + if (anyListeners) broadcastCallback.triggerAsyncUpdate(); } diff --git a/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h b/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h index 4777502c08..2bf5ecc353 100644 --- a/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h +++ b/modules/juce_events/broadcasters/juce_ChangeBroadcaster.h @@ -95,6 +95,8 @@ private: ChangeBroadcasterCallback broadcastCallback; ListenerList changeListeners; + std::atomic anyListeners { false }; + void callListeners(); JUCE_DECLARE_NON_COPYABLE (ChangeBroadcaster)