diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 45c356a7a9..9b9a7f9f38 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -383,8 +383,6 @@ public: vstEffect.flags |= Vst2::effFlagsNoSoundInStop; #endif - vstEffectAtomicFlags = vstEffect.flags; - activePlugins.add (this); } @@ -642,7 +640,7 @@ public: host that we want midi. In the SDK this method is marked as deprecated, but some hosts rely on this behaviour. */ - if (vstEffectAtomicFlags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) + if (vstEffect.flags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) { if (hostCallback != nullptr) hostCallback (&vstEffect, Vst2::audioMasterWantMidi, 0, 1, nullptr, 0); @@ -1128,6 +1126,19 @@ public: editorComp->checkVisibility(); } + void setHasEditorFlag (bool shouldSetHasEditor) + { + auto hasEditor = (vstEffect.flags & Vst2::effFlagsHasEditor) != 0; + + if (shouldSetHasEditor == hasEditor) + return; + + if (shouldSetHasEditor) + vstEffect.flags |= Vst2::effFlagsHasEditor; + else + vstEffect.flags &= ~Vst2::effFlagsHasEditor; + } + void createEditorComp() { if (hasShutdown || processor == nullptr) @@ -1137,15 +1148,13 @@ public: { if (auto* ed = processor->createEditorIfNeeded()) { - vstEffectAtomicFlags |= Vst2::effFlagsHasEditor; + setHasEditorFlag (true); editorComp.reset (new EditorCompWrapper (*this, *ed)); } else { - vstEffectAtomicFlags&= ~Vst2::effFlagsHasEditor; + setHasEditorFlag (false); } - - vstEffect.flags = vstEffectAtomicFlags; } shouldDeleteEditor = false; @@ -1710,12 +1719,7 @@ private: pointer_sized_int handleOpen (VstOpCodeArguments) { // Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here. - if (processor->hasEditor()) - vstEffectAtomicFlags |= Vst2::effFlagsHasEditor; - else - vstEffectAtomicFlags &= ~Vst2::effFlagsHasEditor; - - vstEffect.flags = vstEffectAtomicFlags; + setHasEditorFlag (processor->hasEditor()); return 0; } @@ -2288,7 +2292,6 @@ private: double sampleRate = 44100.0; int32 blockSize = 1024; Vst2::AEffect vstEffect; - std::atomic vstEffectAtomicFlags; CriticalSection stateInformationLock; juce::MemoryBlock chunkMemory; uint32 chunkMemoryTime = 0;