reintroduce code that can automatically connect to JACK under the right conditions
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 12 Oct 2019 18:10:10 +0000 (12:10 -0600)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 12 Oct 2019 18:10:10 +0000 (12:10 -0600)
gtk2_ardour/startup_fsm.cc
gtk2_ardour/startup_fsm.h

index f359865b3a8f1b3dd48e9476297bd433b4bbf4a5..fbe203aaad807810fb7cc084bcf52c939a2b11cd 100644 (file)
@@ -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 ();
 }
-
index bc61cbc70e1f27b50097f9490b243fc5c2cadd0b..ed3fc6ca00070a6063639de764db973d29badb31 100644 (file)
@@ -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;