diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index d1beeb9688..fa8a59c2d8 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -1088,6 +1088,7 @@ void AudioDeviceManager::setDefaultMidiOutputDevice (const String& identifier) { if (defaultMidiOutputDeviceInfo.identifier != identifier) { + std::unique_ptr oldMidiPort; Array oldCallbacks; { @@ -1099,7 +1100,7 @@ void AudioDeviceManager::setDefaultMidiOutputDevice (const String& identifier) for (int i = oldCallbacks.size(); --i >= 0;) oldCallbacks.getUnchecked (i)->audioDeviceStopped(); - defaultMidiOutput.reset(); + std::swap (oldMidiPort, defaultMidiOutput); if (identifier.isNotEmpty()) defaultMidiOutput = MidiOutput::openDevice (identifier); @@ -1119,7 +1120,7 @@ void AudioDeviceManager::setDefaultMidiOutputDevice (const String& identifier) } updateXml(); - sendChangeMessage(); + sendSynchronousChangeMessage(); } } diff --git a/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp b/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp index 3a05def823..d78299b16b 100644 --- a/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp +++ b/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp @@ -1044,7 +1044,6 @@ AudioDeviceSelectorComponent::AudioDeviceSelectorComponent (AudioDeviceManager& deviceManager.addChangeListener (this); updateAllControls(); - startTimer (1000); } AudioDeviceSelectorComponent::~AudioDeviceSelectorComponent() @@ -1098,16 +1097,6 @@ void AudioDeviceSelectorComponent::resized() setSize (getWidth(), r.getY()); } -void AudioDeviceSelectorComponent::timerCallback() -{ - // TODO - // unfortunately, the AudioDeviceManager only gives us changeListenerCallbacks - // if an audio device has changed, but not if a MIDI device has changed. - // This needs to be implemented properly. Until then, we use a workaround - // where we update the whole component once per second on a timer callback. - updateAllControls(); -} - void AudioDeviceSelectorComponent::updateDeviceType() { if (auto* type = deviceManager.getAvailableDeviceTypes() [deviceTypeDropDown->getSelectedId() - 1]) diff --git a/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h b/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h index 092e9c49ff..dd65e3b20d 100644 --- a/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h +++ b/modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h @@ -31,8 +31,7 @@ namespace juce @tags{Audio} */ class JUCE_API AudioDeviceSelectorComponent : public Component, - private ChangeListener, - private Timer + private ChangeListener { public: //============================================================================== @@ -85,7 +84,6 @@ public: private: //============================================================================== - void timerCallback() override; void handleBluetoothButton(); void updateDeviceType(); void updateMidiOutput();