summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/engine_dialog.cc46
-rw-r--r--gtk2_ardour/engine_dialog.h4
2 files changed, 30 insertions, 20 deletions
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc
index 8041dd6843..3da4dca38e 100644
--- a/gtk2_ardour/engine_dialog.cc
+++ b/gtk2_ardour/engine_dialog.cc
@@ -1053,8 +1053,8 @@ EngineControl::get_matching_state (
{
for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
if ((*i)->backend == backend &&
- (*i)->driver == driver &&
- (*i)->device == device) {
+ (!_have_control || ((*i)->driver == driver && (*i)->device == device)))
+ {
return (*i);
}
}
@@ -1081,11 +1081,19 @@ EngineControl::get_saved_state_for_currently_displayed_backend_and_device ()
EngineControl::State
EngineControl::save_state ()
{
+ State state;
+
if (!_have_control) {
- return State();
+ state = get_matching_state (backend_combo.get_active_text(), string(), string());
+ if (state) {
+ return state;
+ }
+ state.reset(new StateStruct);
+ state->backend = get_backend ();
+ } else {
+ state.reset(new StateStruct);
+ store_state (state);
}
- State state (new StateStruct);
- store_state (state);
for (StateList::iterator i = states.begin(); i != states.end();) {
if ((*i)->backend == state->backend &&
@@ -1604,26 +1612,26 @@ EngineControl::post_push ()
* necessary
*/
- if (_have_control) {
- State state = get_saved_state_for_currently_displayed_backend_and_device ();
+ State state = get_saved_state_for_currently_displayed_backend_and_device ();
- if (!state) {
- state = save_state ();
- assert (state);
- }
+ if (!state) {
+ state = save_state ();
+ assert (state);
+ }
- /* all off */
+ /* all off */
- for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
- (*i)->active = false;
- }
+ for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
+ (*i)->active = false;
+ }
- /* mark this one active (to be used next time the dialog is
- * shown)
- */
+ /* mark this one active (to be used next time the dialog is
+ * shown)
+ */
- state->active = true;
+ state->active = true;
+ if (_have_control) { // XXX
manage_control_app_sensitivity ();
}
diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h
index 3e3f9b82fb..16de4c2766 100644
--- a/gtk2_ardour/engine_dialog.h
+++ b/gtk2_ardour/engine_dialog.h
@@ -190,7 +190,9 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
std::vector<MidiDeviceSettings> midi_devices;
StateStruct()
- : input_latency (0)
+ : sample_rate (48000)
+ , buffer_size (1024)
+ , input_latency (0)
, output_latency (0)
, input_channels (0)
, output_channels (0)