diff options
author | Carl Hetherington <carl@carlh.net> | 2009-10-19 18:12:20 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-10-19 18:12:20 +0000 |
commit | 41b8a010da914eace2e300ef0a3c0800ff6183e1 (patch) | |
tree | bbd8d1b47b0ce2c53ddcca0eb4a607da250f4f45 /gtk2_ardour/ardour_ui.cc | |
parent | 917f02e5f62a5603d0314b33bcdc0825a7888606 (diff) |
Stop ardour exiting in the case where you have a loaded session, then select New Session, cancel.
git-svn-id: svn://localhost/ardour2/branches/3.0@5808 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 83a19ff379..41281999ee 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -281,7 +281,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) platform_setup (); } -void +/** @return true if a session was chosen and `apply' clicked, otherwise false if `cancel' was clicked */ +bool ARDOUR_UI::run_startup (bool should_be_new) { if (_startup == 0) { @@ -296,6 +297,8 @@ ARDOUR_UI::run_startup (bool should_be_new) /* we don't return here until the startup assistant is finished */ _startup->hide (); + + return _startup->applying (); } int @@ -654,7 +657,7 @@ ARDOUR_UI::startup () _startup->engine_control()->set_state (*audio_setup); } - if (get_session_parameters (ARDOUR_COMMAND_LINE::new_session)) { + if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session)) { exit (1); } @@ -2261,8 +2264,9 @@ ARDOUR_UI::loading_message (const std::string& /*msg*/) flush_pending (); } +/** @param quit_on_cancel true if exit() should be called if the user clicks `cancel' in the new session dialog */ int -ARDOUR_UI::get_session_parameters (bool should_be_new) +ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new) { Glib::ustring session_name; Glib::ustring session_path; @@ -2270,6 +2274,8 @@ ARDOUR_UI::get_session_parameters (bool should_be_new) int ret = -1; bool likely_new = false; + cout << "get_session_parameters\n"; + while (ret != 0) { if (!should_be_new && !ARDOUR_COMMAND_LINE::session_name.empty()) { @@ -2289,7 +2295,14 @@ ARDOUR_UI::get_session_parameters (bool should_be_new) } else { - run_startup (should_be_new); + bool const apply = run_startup (should_be_new); + if (!apply) { + if (quit_on_cancel) { + exit (1); + } else { + return ret; + } + } /* if we run the startup dialog again, offer more than just "new session" */ @@ -2307,7 +2320,6 @@ ARDOUR_UI::get_session_parameters (bool should_be_new) _session_is_new = true; } - if (session_name[0] == '/' || (session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') || (session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) { @@ -2378,7 +2390,7 @@ ARDOUR_UI::close_session() unload_session (true); ARDOUR_COMMAND_LINE::session_name = ""; - get_session_parameters (false); + get_session_parameters (true, false); } int |