diff --git a/modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h b/modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h index d6a3e946ad..a53773f903 100644 --- a/modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h +++ b/modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h @@ -48,9 +48,13 @@ public: /** Opens the Bluetooth MIDI pairing dialogue, if it is available. + @param exitCallback A callback which will be called when the modal + bluetooth dialog is closed. @return true if the dialogue was opened, false on error. + + @see ModalComponentManager::Callback */ - static bool open(); + static bool open (ModalComponentManager::Callback* exitCallback = nullptr); /** Checks if a Bluetooth MIDI pairing dialogue is available on this platform. diff --git a/modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp b/modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp index d3d5831397..fa99ff2331 100644 --- a/modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp +++ b/modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp @@ -362,8 +362,10 @@ private: class BluetoothMidiSelectorOverlay : public Component { public: - BluetoothMidiSelectorOverlay() + BluetoothMidiSelectorOverlay (ModalComponentManager::Callback* exitCallbackToUse) { + ScopedPointer exitCallback (exitCallbackToUse); + setAlwaysOnTop (true); setVisible (true); addToDesktop (ComponentPeer::windowHasDropShadow); @@ -371,7 +373,7 @@ public: toFront (true); addAndMakeVisible (bluetoothDevicesList); - enterModalState (true, nullptr, true); + enterModalState (true, exitCallback.release(), true); } void paint (Graphics& g) override @@ -424,8 +426,10 @@ private: }; //============================================================================== -bool BluetoothMidiDevicePairingDialogue::open() +bool BluetoothMidiDevicePairingDialogue::open (ModalComponentManager::Callback* exitCallbackPtr) { + ScopedPointer exitCallback (exitCallbackPtr); + if (! RuntimePermissions::isGranted (RuntimePermissions::bluetoothMidi)) { // If you hit this assert, you probably forgot to get RuntimePermissions::bluetoothMidi. @@ -435,7 +439,7 @@ bool BluetoothMidiDevicePairingDialogue::open() return false; } - BluetoothMidiSelectorOverlay* overlay = new BluetoothMidiSelectorOverlay; + BluetoothMidiSelectorOverlay* overlay = new BluetoothMidiSelectorOverlay (exitCallback.release()); return true; } diff --git a/modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm b/modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm index 760ae78c1a..7c84165364 100644 --- a/modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm +++ b/modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm @@ -40,8 +40,10 @@ namespace juce class BluetoothMidiSelectorOverlay : public Component { public: - BluetoothMidiSelectorOverlay() + BluetoothMidiSelectorOverlay (ModalComponentManager::Callback* exitCallbackToUse) { + ScopedPointer exitCallback; + setAlwaysOnTop (true); setVisible (true); addToDesktop (ComponentPeer::windowHasDropShadow); @@ -53,7 +55,7 @@ public: addAndMakeVisible (nativeSelectorComponent); - enterModalState (true, nullptr, true); + enterModalState (true, exitCallback.release(), true); } ~BluetoothMidiSelectorOverlay() @@ -96,11 +98,13 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BluetoothMidiSelectorOverlay) }; -bool BluetoothMidiDevicePairingDialogue::open() +bool BluetoothMidiDevicePairingDialogue::open (ModalComponentManager::Callback* exitCallback) { + ScopedPointer cb (exitCallback); + if (isAvailable()) { - new BluetoothMidiSelectorOverlay(); + new BluetoothMidiSelectorOverlay (cb.release()); return true; } @@ -115,7 +119,11 @@ bool BluetoothMidiDevicePairingDialogue::isAvailable() //============================================================================== #else -bool BluetoothMidiDevicePairingDialogue::open() { return false; } -bool BluetoothMidiDevicePairingDialogue::isAvailable() { return false; } +bool BluetoothMidiDevicePairingDialogue::open (ModalComponentManager::Callback* exitCallback) +{ + ScopedPointer cb (exitCallback); + return false; +} +bool BluetoothMidiDevicePairingDialogue::isAvailable() { return false; } #endif diff --git a/modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp b/modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp index 0d85e0b772..1fbed75cea 100644 --- a/modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp +++ b/modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp @@ -22,8 +22,9 @@ ============================================================================== */ -bool BluetoothMidiDevicePairingDialogue::open() +bool BluetoothMidiDevicePairingDialogue::open (ModalComponentManager::Callback* exitCallback) { + ScopedPointer cb (exitCallback); // not implemented on Linux yet! // You should check whether the dialogue is available on your system // using isAvailable() before calling open(). diff --git a/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm b/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm index 50dfe3b0bd..6542d9cb14 100644 --- a/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm +++ b/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm @@ -22,8 +22,9 @@ ============================================================================== */ -bool BluetoothMidiDevicePairingDialogue::open() +bool BluetoothMidiDevicePairingDialogue::open (ModalComponentManager::Callback* exitCallback) { + ScopedPointer cb (exitCallback); // Do not call this on OSX. Instead, you should pair Bluetooth MIDI devices // using the "Audio MIDI Setup" app (located in /Applications/Utilities). jassertfalse; diff --git a/modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp b/modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp index 117f982c75..ece22d8bfd 100644 --- a/modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp +++ b/modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp @@ -22,8 +22,9 @@ ============================================================================== */ -bool BluetoothMidiDevicePairingDialogue::open() +bool BluetoothMidiDevicePairingDialogue::open (ModalComponentManager::Callback* exitCallback) { + ScopedPointer cb (exitCallback); // not implemented on Windows yet! // You should check whether the dialogue is available on your system // using isAvailable() before calling open().