From 0cb9d4a3d2c0dcd8535e50b8518b9bf8b6df3dc9 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 26 Nov 2016 14:31:24 +0100 Subject: [PATCH] Restrict Device selection to valid choices. --- gtk2_ardour/engine_dialog.cc | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index b20b56176f..192c750131 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -1592,6 +1592,24 @@ void EngineControl::input_device_changed () { DEBUG_ECONTROL ("input_device_changed"); + + boost::shared_ptr backend = ARDOUR::AudioEngine::instance()->current_backend(); + if (backend && backend->match_input_output_devices_or_none ()) { + const std::string& dev_none = ARDOUR::AudioBackend::get_standard_device_name (ARDOUR::AudioBackend::DeviceNone); + + if (get_output_device_name () != dev_none + && get_input_device_name () != dev_none + && get_input_device_name () != get_output_device_name ()) { + block_changed_signals (); + if (contains_value (output_device_combo, get_input_device_name ())) { + output_device_combo.set_active_text (get_input_device_name ()); + } else { + assert (contains_value (output_device_combo, dev_none)); + output_device_combo.set_active_text (dev_none); + } + unblock_changed_signals (); + } + } device_changed (); } @@ -1599,6 +1617,23 @@ void EngineControl::output_device_changed () { DEBUG_ECONTROL ("output_device_changed"); + boost::shared_ptr backend = ARDOUR::AudioEngine::instance()->current_backend(); + if (backend && backend->match_input_output_devices_or_none ()) { + const std::string& dev_none = ARDOUR::AudioBackend::get_standard_device_name (ARDOUR::AudioBackend::DeviceNone); + + if (get_input_device_name () != dev_none + && get_input_device_name () != dev_none + && get_input_device_name () != get_output_device_name ()) { + block_changed_signals (); + if (contains_value (input_device_combo, get_output_device_name ())) { + input_device_combo.set_active_text (get_output_device_name ()); + } else { + assert (contains_value (input_device_combo, dev_none)); + input_device_combo.set_active_text (dev_none); + } + unblock_changed_signals (); + } + } device_changed (); } -- 2.30.2