From 098827cc5e744b40f8835035ac34dbc74ab07e30 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 10 Jun 2019 15:01:27 +0100 Subject: [PATCH] Workaround for an order-of-deletion problem in the GenericAudioProcessorEditor when parameter lists change --- .../juce_GenericAudioProcessorEditor.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp b/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp index 49844cba12..48bd683cdb 100644 --- a/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp +++ b/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp @@ -33,9 +33,9 @@ class ParameterListener : private AudioProcessorParameter::Listener, { public: ParameterListener (AudioProcessor& proc, AudioProcessorParameter& param) - : processor (proc), parameter (param) + : processor (proc), parameter (param), isLegacyParam (LegacyAudioParameter::isLegacy (¶m)) { - if (LegacyAudioParameter::isLegacy (¶meter)) + if (isLegacyParam) processor.addListener (this); else parameter.addListener (this); @@ -45,7 +45,7 @@ public: ~ParameterListener() override { - if (LegacyAudioParameter::isLegacy (¶meter)) + if (isLegacyParam) processor.removeListener (this); else parameter.removeListener (this); @@ -93,6 +93,7 @@ private: AudioProcessor& processor; AudioProcessorParameter& parameter; Atomic parameterValueHasChanged { 0 }; + const bool isLegacyParam; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterListener) }; @@ -498,6 +499,11 @@ public: setSize (maxWidth, height); } + ~ParametersPanel() + { + paramComponents.clear(); + } + void paint (Graphics& g) override { g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId)); @@ -535,6 +541,11 @@ struct GenericAudioProcessorEditor::Pimpl view.setScrollBarsShown (true, false); } + ~Pimpl() + { + view.setViewedComponent (nullptr, false); + } + void resize (Rectangle size) { view.setBounds (size);