diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp index 67c0a26341..b24005b54d 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -328,6 +328,7 @@ struct AAXClasses setOpaque (true); addAndMakeVisible (pluginEditor = plugin->createEditorIfNeeded()); setBounds (pluginEditor->getLocalBounds()); + setBroughtToFrontOnMouseClick (true); } ~ContentWrapperComponent() diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index faaa080f71..7b1b2e9241 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -392,7 +392,9 @@ public: if (juceFilter->isMetaParameter (index)) outParameterInfo.flags |= kAudioUnitParameterFlag_IsGlobalMeta; - AUBase::FillInParameterName (outParameterInfo, name.toCFString(), false); + CFStringRef cfName (name.toCFString()); + AUBase::FillInParameterName (outParameterInfo, cfName, false); + CFRelease (cfName); outParameterInfo.minValue = 0.0f; outParameterInfo.maxValue = 1.0f; @@ -868,17 +870,22 @@ protected: if (outData != nullptr) { const int numPrograms = juceFilter->getNumPrograms(); - presetsArray.ensureSize (sizeof (AUPreset) * numPrograms, true); - AUPreset* const presets = (AUPreset*) presetsArray.getData(); + presetsArray.calloc (numPrograms); CFMutableArrayRef presetsArrayRef = CFArrayCreateMutable (0, numPrograms, 0); for (int i = 0; i < numPrograms; ++i) { - presets[i].presetNumber = i; - presets[i].presetName = juceFilter->getProgramName(i).toCFString(); + String name (juceFilter->getProgramName(i)); + if (name.isEmpty()) + name = "Untitled"; - CFArrayAppendValue (presetsArrayRef, presets + i); + AUPreset& p = presetsArray[i]; + p.presetNumber = i; + p.presetName = name.toCFString(); + + CFArrayAppendValue (presetsArrayRef, &p); + CFRelease (p.presetName); } *outData = (CFArrayRef) presetsArrayRef; @@ -927,7 +934,7 @@ private: SMPTETime lastSMPTETime; AUChannelInfo channelInfo [numChannelConfigs]; AudioUnitEvent auEvent; - mutable juce::MemoryBlock presetsArray; + mutable HeapBlock presetsArray; CriticalSection incomingMidiLock; JUCE_DECLARE_NON_COPYABLE (JuceAU); 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 91d070a181..1a8456b92c 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -830,7 +830,7 @@ public: void audioProcessorChanged (AudioProcessor*) { - setInitialDelay (processor->getLatencySamples()); + setInitialDelay (filter->getLatencySamples()); ioChanged(); updateDisplay(); } diff --git a/modules/juce_core/memory/juce_ScopedPointer.h b/modules/juce_core/memory/juce_ScopedPointer.h index cde54396f3..0676fdcfcf 100644 --- a/modules/juce_core/memory/juce_ScopedPointer.h +++ b/modules/juce_core/memory/juce_ScopedPointer.h @@ -227,4 +227,11 @@ bool operator!= (const ScopedPointer& pointer1, ObjectType* const po return static_cast (pointer1) != pointer2; } +//============================================================================== +#ifndef DOXYGEN +// NB: This is just here to prevent any silly attempts to call deleteAndZero() on a ScopedPointer. +template +void deleteAndZero (ScopedPointer&) { static_jassert (sizeof (Type) == 12345); } +#endif + #endif // __JUCE_SCOPEDPOINTER_JUCEHEADER__