make ARDOUR_UI::load_session_from_startup_fsm() return a value, and use it
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 10 Oct 2019 21:24:20 +0000 (15:24 -0600)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 10 Oct 2019 22:52:00 +0000 (16:52 -0600)
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui_startup.cc

index 13a5092baacdb4ed8aaa38172f3132c85e7bd742..78cad3506b7a80141e6a0f7c7b5df556f40ad732 100644 (file)
@@ -225,7 +225,7 @@ public:
        void session_dialog_response_handler (int response, SessionDialog* session_dialog);
        int  build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
        bool ask_about_loading_existing_session (const std::string& session_path);
-       void load_session_from_startup_fsm ();
+       int load_session_from_startup_fsm ();
 
        /// @return true if session was successfully unloaded.
        int unload_session (bool hide_stuff = false);
index e89e5a2f11df141890911c1796c6eaed5623db24..2b0eadc405b573678e16fea7e0aea8378214f97e 100644 (file)
@@ -484,13 +484,21 @@ ARDOUR_UI::sfsm_response (StartupFSM::Result r)
 {
        switch (r) {
        case StartupFSM::ExitProgram:
+               cerr << "ExitProgram\n";
                queue_finish ();
                break;
        case StartupFSM::LoadSession:
+               cerr << "LoadSession\n";
                _initial_verbose_plugin_scan = false;
-               load_session_from_startup_fsm ();
+               if (load_session_from_startup_fsm () == 0) {
+                       startup_fsm->end();
+                       delete startup_fsm;
+                       startup_fsm = 0;
+                       startup_done ();
+               }
                break;
        case StartupFSM::DoNothing:
+               cerr << "DoNothing\n";
                break;
        }
 }
@@ -532,35 +540,32 @@ ARDOUR_UI::starting ()
        return 0;
 }
 
-void
+int
 ARDOUR_UI::load_session_from_startup_fsm ()
 {
-       string session_path = startup_fsm->session_path;
-       string session_name = startup_fsm->session_name;
-       string session_template = startup_fsm->session_template;
-       bool   session_is_new = startup_fsm->session_is_new;
-       BusProfile bus_profile = startup_fsm->bus_profile;
+       const string session_path = startup_fsm->session_path;
+       const string session_name = startup_fsm->session_name;
+       const string session_template = startup_fsm->session_template;
+       const bool   session_is_new = startup_fsm->session_is_new;
+       const BusProfile bus_profile = startup_fsm->bus_profile;
 
        std::cerr  << " loading from " << session_path << " as " << session_name << " templ " << session_template << " is_new " << session_is_new << " bp " << bus_profile.master_out_channels << std::endl;
 
        if (session_is_new) {
 
                if (build_session (session_path, session_name, &bus_profile)) {
+                       return -1;
                }
 
                if (!session_template.empty() && session_template.substr (0, 11) == "urn:ardour:") {
                        meta_session_setup (session_template.substr (11));
                }
 
-       } else {
+               return 0;
+       }
 
-               int ret = load_session (session_path, session_name, session_template);
+       return load_session (session_path, session_name, session_template);
 
-               if (ret == -2) {
-                       /* not connected to the AudioEngine, so quit to avoid an infinite loop */
-                       exit (EXIT_FAILURE);
-               }
-       }
 }
 
 void