From 4f4ddf97338652aca5a688b5f7875d62bdd76b2b Mon Sep 17 00:00:00 2001 From: attila Date: Tue, 12 Dec 2023 12:04:36 +0100 Subject: [PATCH] AU Client: Use ScopedJuceInitialiser_GUI to ensure the MessageManager exists This makes the AU Client compatible with other classes also using the ScopedJuceInitialiser_GUI, specifically the ARADocumentController. --- .../juce_audio_plugin_client_AU_1.mm | 19 +++++-------------- .../messages/juce_Initialisation.h | 3 +++ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm index 9f5c44c789..c1ed41aa97 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm @@ -89,18 +89,14 @@ template <> struct ContainerDeletePolicy { static void destr // make sure the audio processor is initialized before the AUBase class struct AudioProcessorHolder { - AudioProcessorHolder (bool initialiseGUI) + AudioProcessorHolder() { - if (initialiseGUI) - initialiseJuce_GUI(); - - juceFilter = createPluginFilterOfType (AudioProcessor::wrapperType_AudioUnit); - // audio units do not have a notion of enabled or un-enabled buses juceFilter->enableAllBuses(); } - std::unique_ptr juceFilter; + ScopedJuceInitialiser_GUI scopedInitialiser; + std::unique_ptr juceFilter { createPluginFilterOfType (AudioProcessor::wrapperType_AudioUnit) }; }; //============================================================================== @@ -111,8 +107,7 @@ class JuceAU final : public AudioProcessorHolder, { public: JuceAU (AudioUnit component) - : AudioProcessorHolder (activePlugins.size() + activeUIs.size() == 0), - MusicDeviceBase (component, + : MusicDeviceBase (component, (UInt32) AudioUnitHelpers::getBusCountForWrapper (*juceFilter, true), (UInt32) AudioUnitHelpers::getBusCountForWrapper (*juceFilter, false)) { @@ -173,9 +168,6 @@ public: jassert (activePlugins.contains (this)); activePlugins.removeFirstMatchingValue (this); - - if (activePlugins.size() + activeUIs.size() == 0) - shutdownJuce_GUI(); } //============================================================================== @@ -1723,6 +1715,7 @@ public: } private: + ScopedJuceInitialiser_GUI scopedInitialiser; Rectangle lastBounds; JUCE_DECLARE_NON_COPYABLE (EditorCompHolder) @@ -1823,8 +1816,6 @@ public: // there's some kind of component currently modal, but the host // is trying to delete our plugin.. jassert (Component::getCurrentlyModalComponent() == nullptr); - - shutdownJuce_GUI(); } } }; diff --git a/modules/juce_events/messages/juce_Initialisation.h b/modules/juce_events/messages/juce_Initialisation.h index df016041ad..75b696865a 100644 --- a/modules/juce_events/messages/juce_Initialisation.h +++ b/modules/juce_events/messages/juce_Initialisation.h @@ -74,6 +74,9 @@ public: /** The destructor simply calls shutdownJuce_GUI(). */ ~ScopedJuceInitialiser_GUI(); + + JUCE_DECLARE_NON_COPYABLE (ScopedJuceInitialiser_GUI) + JUCE_DECLARE_NON_MOVEABLE (ScopedJuceInitialiser_GUI) };