summaryrefslogtreecommitdiff
path: root/gtk2_ardour/engine_dialog.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-11-23 21:44:13 +0100
committerRobin Gareus <robin@gareus.org>2015-11-23 22:45:16 +0100
commitb754c4341e669729e29183abcd0857ec55eddb16 (patch)
treed76835fd4427c8923dc35ff40d96875093e7cb4f /gtk2_ardour/engine_dialog.cc
parent3c9b71b50ebd24376c84d1d9917084b4d780b195 (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.cc24
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,