diff options
author | Robin Gareus <robin@gareus.org> | 2015-11-23 21:44:13 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-11-23 22:45:16 +0100 |
commit | b754c4341e669729e29183abcd0857ec55eddb16 (patch) | |
tree | d76835fd4427c8923dc35ff40d96875093e7cb4f /gtk2_ardour/engine_dialog.cc | |
parent | 3c9b71b50ebd24376c84d1d9917084b4d780b195 (diff) |
restore last used driver+devices for a given backend.
Diffstat (limited to 'gtk2_ardour/engine_dialog.cc')
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 5e7d4f5a3e..d8f35b211a 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -1021,6 +1021,15 @@ EngineControl::backend_changed () set_active_text_if_present (buffer_size_combo, bufsize_as_string (backend->buffer_size())); } + if (_have_control && !ignore_changes) { + // set driver & devices + State state = get_matching_state (backend_combo.get_active_text()); + if (state) { + PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1); + set_current_state (state); + } + } + if (!ignore_changes) { maybe_display_saved_state (); } @@ -1270,6 +1279,8 @@ EngineControl::driver_changed () backend->set_driver (driver_combo.get_active_text()); list_devices (); + // TODO load LRU device(s) for backend + driver combo + if (!ignore_changes) { maybe_display_saved_state (); } @@ -1616,6 +1627,19 @@ EngineControl::parameter_changed () } EngineControl::State +EngineControl::get_matching_state (const string& backend) +{ + for (StateList::iterator i = states.begin(); i != states.end(); ++i) { + // TODO use LRU for every backend and prefer the active one + // uniqueness is only guaranteed for backend + driver + device(s) + if ((*i)->backend == backend) { + return (*i); + } + } + return State(); +} + +EngineControl::State EngineControl::get_matching_state ( const string& backend, const string& driver, |