diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-08-10 21:28:21 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-08-11 09:24:52 +1000 |
commit | dfa9a2326a10bb6a18fdd47a0c308283542b4016 (patch) | |
tree | c0cdfa9cb30ab12fb6b959d39fe49d322aaad894 /gtk2_ardour/engine_dialog.cc | |
parent | 1bea87e10adba7c29435d99ae519be1e7490eb3a (diff) |
Reimplement method using code extracted from EngineDialog::backend_changed
EngineControl::set_driver_popdown_strings is now like the other
set_*_popdown_strings methods in that it sets the driver strings and a
default active entry and returns false if no drivers are available.
Diffstat (limited to 'gtk2_ardour/engine_dialog.cc')
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 82ca022035..16114f2577 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -843,31 +843,8 @@ EngineControl::backend_changed () _midi_devices.clear(); if (backend->requires_driver_selection()) { - vector<string> drivers = backend->enumerate_drivers(); - driver_combo.set_sensitive (true); - - if (!drivers.empty()) { - { - string current_driver; - current_driver = backend->driver_name (); - - DEBUG_ECONTROL (string_compose ("backend->driver_name: %1", current_driver)); - - // driver might not have been set yet - if (current_driver == "") { - current_driver = driver_combo.get_active_text (); - if (current_driver == "") - // driver has never been set, make sure it's not blank - current_driver = drivers.front (); - } - - PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1); - set_popdown_strings (driver_combo, drivers); - DEBUG_ECONTROL ( - string_compose ("driver_combo.set_active_text: %1", current_driver)); - driver_combo.set_active_text (current_driver); - } - + if (set_driver_popdown_strings ()) { + driver_combo.set_sensitive (true); driver_changed (); } @@ -930,21 +907,37 @@ EngineControl::print_channel_count (Gtk::SpinButton* sb) return true; } +// @return true if there are drivers available bool EngineControl::set_driver_popdown_strings () { DEBUG_ECONTROL ("set_driver_popdown_strings"); - string backend_name = backend_combo.get_active_text(); - boost::shared_ptr<ARDOUR::AudioBackend> backend; + boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend(); + vector<string> drivers = backend->enumerate_drivers(); - if (!(backend = ARDOUR::AudioEngine::instance()->set_backend (backend_name, "ardour", ""))) { - /* eh? setting the backend failed... how ? */ - /* A: stale config contains a backend that does not exist in current build */ + if (drivers.empty()) { + // This is an error...? return false; } - vector<string> drivers = backend->enumerate_drivers(); + string current_driver; + current_driver = backend->driver_name (); + + DEBUG_ECONTROL (string_compose ("backend->driver_name: %1", current_driver)); + + // driver might not have been set yet + if (current_driver == "") { + current_driver = driver_combo.get_active_text (); + if (current_driver == "") + // driver has never been set, make sure it's not blank + current_driver = drivers.front (); + } + + PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1); set_popdown_strings (driver_combo, drivers); + DEBUG_ECONTROL ( + string_compose ("driver_combo.set_active_text: %1", current_driver)); + driver_combo.set_active_text (current_driver); return true; } |