From b490115d5fba2e75e340579a802bc6bc9014600f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 12 Oct 2019 12:10:10 -0600 Subject: [PATCH] reintroduce code that can automatically connect to JACK under the right conditions --- gtk2_ardour/startup_fsm.cc | 62 ++++++++++++++++++++++++++++++++------ gtk2_ardour/startup_fsm.h | 1 + 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/startup_fsm.cc b/gtk2_ardour/startup_fsm.cc index f359865b3a..fbe203aaad 100644 --- a/gtk2_ardour/startup_fsm.cc +++ b/gtk2_ardour/startup_fsm.cc @@ -231,15 +231,7 @@ StartupFSM::dialog_response_handler (int response, StartupFSM::DialogID dialog_i */ break; case 0: - _state = NeedEngineParams; - session_dialog->hide (); - delete session_dialog; - session_dialog = 0; - current_dialog_connection.disconnect(); - if (!session_is_new && session_existing_sample_rate > 0) { - audiomidi_dialog.set_desired_sample_rate (session_existing_sample_rate); - } - show_audiomidi_dialog (); + start_audio_midi_setup (); break; } break; @@ -313,6 +305,57 @@ StartupFSM::show_audiomidi_dialog () audiomidi_dialog.present (); } +void +StartupFSM::start_audio_midi_setup () +{ + bool setup_required = false; + + if (AudioEngine::instance()->current_backend() == 0) { + /* backend is unknown ... */ + setup_required = true; + + } else if (session_is_new && AudioEngine::instance()->running() && AudioEngine::instance()->sample_rate () == session_existing_sample_rate) { + /* keep engine */ + + warning << "A running engine should not be possible at this point" << endmsg; + + } else if (AudioEngine::instance()->setup_required()) { + /* backend is known, but setup is needed */ + setup_required = true; + + } else if (!AudioEngine::instance()->running()) { + /* should always be true during startup */ + if (AudioEngine::instance()->start()) { + setup_required = true; + } + } + + if (setup_required) { + _state = NeedEngineParams; + if (session_dialog) { + session_dialog->hide (); + delete_when_idle (session_dialog); + session_dialog = 0; + } + current_dialog_connection.disconnect(); + if (!session_is_new && session_existing_sample_rate > 0) { + audiomidi_dialog.set_desired_sample_rate (session_existing_sample_rate); + } + show_audiomidi_dialog (); + } else { + /* XXX should we reset _state to something meaningul here (e.g. "Done")? */ + + if (session_dialog) { + session_dialog->hide (); + delete_when_idle (session_dialog); + session_dialog = 0; + } + + current_dialog_connection.disconnect (); + _signal_response (LoadSession); + } +} + bool StartupFSM::get_session_parameters_from_command_line (bool new_session_required) { @@ -762,4 +805,3 @@ Full information on all the above can be found on the support page at\n\ pre_release_dialog->set_position (WIN_POS_CENTER); pre_release_dialog->present (); } - diff --git a/gtk2_ardour/startup_fsm.h b/gtk2_ardour/startup_fsm.h index bc61cbc70e..ed3fc6ca00 100644 --- a/gtk2_ardour/startup_fsm.h +++ b/gtk2_ardour/startup_fsm.h @@ -92,6 +92,7 @@ class StartupFSM : public sigc::trackable void queue_finish (); bool ask_about_loading_existing_session (const std::string& session_path); int check_session_parameters (bool must_be_new); + void start_audio_midi_setup (); NewUserWizard* new_user_wizard; EngineControl& audiomidi_dialog;