From 696010964197e082f55e1864980a16f9255b8956 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Mon, 12 Aug 2019 10:40:28 +0100 Subject: [PATCH 1/6] Fixed a typo in ChangeList.txt --- ChangeList.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeList.txt b/ChangeList.txt index a1a755f561..0def361162 100644 --- a/ChangeList.txt +++ b/ChangeList.txt @@ -9,7 +9,7 @@ Version 5.4.4 - Added support for persisting attachements to MIDI devices - Refactored Linux event loop handling - Multiple C++ modernisation improvements to the API - - Added support for macOS 10.55 and iOS 13 + - Added support for macOS 10.15 and iOS 13 - Added support for Visual Studio 2019 - Removed support for Visual Studio 2013 From 91664000d9bddb8ebc8d75f9fed387ccf4bd9d82 Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 13 Aug 2019 12:27:04 +0100 Subject: [PATCH 2/6] Linux: Improved message queue performance --- modules/juce_events/native/juce_linux_Messaging.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/juce_events/native/juce_linux_Messaging.cpp b/modules/juce_events/native/juce_linux_Messaging.cpp index 9f20e95b45..544ed7ad74 100644 --- a/modules/juce_events/native/juce_linux_Messaging.cpp +++ b/modules/juce_events/native/juce_linux_Messaging.cpp @@ -38,7 +38,7 @@ public: LinuxEventLoop::registerFdCallback (getReadHandle(), [this] (int fd) { - if (auto msg = popNextMessage (fd)) + while (auto msg = popNextMessage (fd)) { JUCE_TRY { @@ -77,7 +77,7 @@ public: } //============================================================================== - JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL (InternalMessageQueue) + JUCE_DECLARE_SINGLETON (InternalMessageQueue, false) private: CriticalSection lock; @@ -183,7 +183,7 @@ public: } //============================================================================== - JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL (InternalRunLoop) + JUCE_DECLARE_SINGLETON (InternalRunLoop, false) private: CriticalSection lock; From 293d7be0b4e4b7ecaa96d01c4f3351393275ac9b Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 14 Aug 2019 16:17:05 +0100 Subject: [PATCH 3/6] macOS: Handle EOF in CoreAudioReader::readSamples() --- modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp index 039da4afab..330b86b2c0 100644 --- a/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp @@ -494,6 +494,9 @@ public: if (status != noErr) return false; + if (numFramesToRead == 0) + break; + if ((int) numFramesToRead < numThisTime) { numThisTime = (int) numFramesToRead; From 9ea9a97e502c1e6d5cbd725c071135c4dbf725ce Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 15 Aug 2019 15:34:02 +0100 Subject: [PATCH 4/6] Fixed backwards compatibility of AudioDeviceManager::addMidiInputCallback() when passing an empty string --- .../audio_io/juce_AudioDeviceManager.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index 7dbe010132..a26a3bf49c 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -1098,12 +1098,19 @@ bool AudioDeviceManager::isMidiInputEnabled (const String& name) const void AudioDeviceManager::addMidiInputCallback (const String& name, MidiInputCallback* callbackToAdd) { - for (auto& device : MidiInput::getAvailableDevices()) + if (name.isEmpty()) { - if (device.name == name) + addMidiInputDeviceCallback ({}, callbackToAdd); + } + else + { + for (auto& device : MidiInput::getAvailableDevices()) { - addMidiInputDeviceCallback (device.identifier, callbackToAdd); - return; + if (device.name == name) + { + addMidiInputDeviceCallback (device.identifier, callbackToAdd); + return; + } } } } From 84849f8808b9ddb77464d846adb8d2ffe5b8eb3f Mon Sep 17 00:00:00 2001 From: reuk Date: Sat, 17 Aug 2019 12:37:18 +0100 Subject: [PATCH 5/6] APVTS: Fix apvts parameter update recursion --- .../utilities/juce_AudioProcessorValueTreeState.cpp | 7 ++++++- .../utilities/juce_AudioProcessorValueTreeState.h | 12 +++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp index 681d3e0f04..ad36c5aa0d 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp @@ -71,7 +71,9 @@ void AudioProcessorValueTreeState::Parameter::valueChanged (float newValue) return; lastValue = newValue; - sendValueChangedMessageToListeners (newValue); + + if (onValueChanged != nullptr) + onValueChanged(); } //============================================================================== @@ -87,6 +89,9 @@ public: unnormalisedValue (getRange().convertFrom0to1 (parameter.getDefaultValue())) { parameter.addListener (this); + + if (auto* ptr = dynamic_cast (¶meter)) + ptr->onValueChanged = [this] { parameterValueChanged ({}, {}); }; } ~ParameterAdapter() override { parameter.removeListener (this); } diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h index a0cc2b0e0f..f1ee8a434a 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h @@ -362,6 +362,10 @@ public: UndoManager* const undoManager; //============================================================================== +private: + class ParameterAdapter; + +public: /** A parameter class that maintains backwards compatibility with deprecated AudioProcessorValueTreeState functionality. @@ -416,9 +420,13 @@ public: private: void valueChanged (float) override; + std::function onValueChanged; + const float unsnappedDefault; const bool metaParameter, automatable, discrete, boolean; - float lastValue = 0.0f; + float lastValue = -1.0f; + + friend class AudioProcessorValueTreeState::ParameterAdapter; }; //============================================================================== @@ -523,8 +531,6 @@ private: bool, bool, bool, AudioProcessorParameter::Category, bool)); //============================================================================== - class ParameterAdapter; - #if JUCE_UNIT_TESTS friend struct ParameterAdapterTests; #endif From 3a4c0f901204a1aeec05597421da80acff403a4a Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 27 Aug 2019 14:30:50 +0100 Subject: [PATCH 6/6] Ensure that PopupMenu section headers aren't selectable --- modules/juce_gui_basics/menus/juce_PopupMenu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 6b47010343..bc2d63d397 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -1589,6 +1589,7 @@ void PopupMenu::addSeparator() void PopupMenu::addSectionHeader (String title) { Item i (std::move (title)); + i.itemID = 0; i.isSectionHeader = true; addItem (std::move (i)); }