From a7e9edb2e9b4a7227c1520951254850ede3b7f03 Mon Sep 17 00:00:00 2001 From: reuk Date: Sun, 3 Nov 2024 19:53:22 +0000 Subject: [PATCH] StandaloneFilterWindow: Update implementation of getInstance to avoid iterating through desktop windows --- .../Standalone/juce_StandaloneFilterWindow.h | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index c81d8479f0..328105bcc1 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -91,6 +91,10 @@ public: channelConfiguration (channels), autoOpenMidiDevices (shouldAutoOpenMidiDevices) { + // Only one StandalonePluginHolder may be created at a time + jassert (currentInstance == nullptr); + currentInstance = this; + shouldMuteInput.addListener (this); shouldMuteInput = ! isInterAppAudioConnected(); @@ -128,6 +132,8 @@ public: handleDeletePlugin(); shutDownAudioDevices(); + + currentInstance = nullptr; } //============================================================================== @@ -409,7 +415,10 @@ public: return {}; } - static StandalonePluginHolder* getInstance(); + static StandalonePluginHolder* getInstance() + { + return currentInstance; + } //============================================================================== OptionalScopedPointer settings; @@ -432,6 +441,8 @@ public: ScopedMessageBox messageBox; private: + inline static StandalonePluginHolder* currentInstance = nullptr; + //============================================================================== void handleCreatePlugin() { @@ -1160,21 +1171,4 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StandaloneFilterWindow) }; -inline StandalonePluginHolder* StandalonePluginHolder::getInstance() -{ - #if JucePlugin_Enable_IAA || JucePlugin_Build_Standalone - if (PluginHostType::getPluginLoadedAs() == AudioProcessor::wrapperType_Standalone) - { - auto& desktop = Desktop::getInstance(); - const int numTopLevelWindows = desktop.getNumComponents(); - - for (int i = 0; i < numTopLevelWindows; ++i) - if (auto window = dynamic_cast (desktop.getComponent (i))) - return window->getPluginHolder(); - } - #endif - - return nullptr; -} - } // namespace juce