From 457654a3f90a42ee36041e095be3a0299ba671d5 Mon Sep 17 00:00:00 2001 From: jules Date: Sun, 21 Sep 2008 11:03:02 +0000 Subject: [PATCH] --- .../wrapper/formats/VST/juce_VstWrapper.cpp | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp b/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp index 5f30a438c7..b722aaa37e 100644 --- a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp +++ b/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp @@ -212,6 +212,8 @@ public: if (! juce_postMessageToSystemQueue (m)) delete m; + waitForThreadToExit (5000); + clearSingletonInstance(); } @@ -356,6 +358,7 @@ public: firstResize = true; hasShutdown = false; firstProcessCallback = true; + shouldDeleteEditor = false; channels = 0; numInChans = JucePlugin_MaxNumInputChannels; numOutChans = JucePlugin_MaxNumOutputChannels; @@ -399,7 +402,7 @@ public: ~JuceVSTWrapper() { stopTimer(); - deleteEditor(); + deleteEditor (false); hasShutdown = true; @@ -443,7 +446,7 @@ public: jassert (! recursionCheck); stopTimer(); - deleteEditor(); + deleteEditor (false); } //============================================================================== @@ -1056,6 +1059,12 @@ public: void timerCallback() { + if (shouldDeleteEditor) + { + shouldDeleteEditor = false; + deleteEditor (true); + } + if (chunkMemoryTime > 0 && chunkMemoryTime < JUCE_NAMESPACE::Time::getApproximateMillisecondCounter() - 2000 && ! recursionCheck) @@ -1125,9 +1134,11 @@ public: editorComp = new EditorCompWrapper (this, ed); } } + + shouldDeleteEditor = false; } - void deleteEditor() + void deleteEditor (bool canDeleteLaterIfModal) { PopupMenu::dismissAllActiveMenus(); @@ -1142,7 +1153,15 @@ public: { Component* const modalComponent = Component::getCurrentlyModalComponent(); if (modalComponent != 0) + { modalComponent->exitModalState (0); + + if (canDeleteLaterIfModal) + { + shouldDeleteEditor = true; + return; + } + } filter->editorBeingDeleted (editorComp->getEditorComp()); @@ -1174,7 +1193,7 @@ public: { jassert (! recursionCheck); - deleteEditor(); + deleteEditor (true); createEditorComp(); if (editorComp != 0) @@ -1247,7 +1266,7 @@ public: } else if (opCode == effEditClose) { - deleteEditor(); + deleteEditor (true); return 0; } else if (opCode == effEditGetRect) @@ -1394,6 +1413,7 @@ private: float** channels; VoidArray tempChannels; // see note in processReplacing() bool hasCreatedTempChannels; + bool shouldDeleteEditor; void deleteTempChannels() {