summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Vegard Ovesen <roy.vegard.ovesen@gmail.com>2013-03-31 03:46:07 +0200
committerRoy Vegard Ovesen <roy.vegard.ovesen@gmail.com>2013-03-31 03:59:10 +0200
commit2806828962e63a2b2ad078ed6328dbd64e02e3eb (patch)
tree059d58dbf2255ea2214f0a7257de033407db1b80
parent81a343ff7f1e456210d85b918e4a2979e73204d9 (diff)
Better start up
Don't reply to nsm server until ardour project is finished loading
-rw-r--r--gtk2_ardour/ardour_ui.cc23
-rw-r--r--gtk2_ardour/nsm.cc12
-rw-r--r--gtk2_ardour/nsm.h5
3 files changed, 34 insertions, 6 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 3d148a9735..d42bdcdd4f 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -666,11 +666,27 @@ ARDOUR_UI::startup ()
if (!nsm->init (nsm_url)) {
nsm->announce (PROGRAM_NAME, ":dirty:", "ardour3");
+ // wait for announce reply from nsm server
+ do {
+ nsm->check ();
+ usleep (10);
+ } while (!nsm->is_active ());
+ // wait for open command from nsm server
do {
nsm->check ();
usleep (10);
} while (!nsm->client_id ());
+ if (_session && nsm) {
+ _session->set_nsm_state( nsm->is_active() );
+ }
+
+ // wait for session is loaded reply from nsm server
+ do {
+ nsm->check ();
+ usleep (10);
+ } while (!nsm->session_loaded ());
+
}
else {
delete nsm;
@@ -678,13 +694,10 @@ ARDOUR_UI::startup ()
}
}
- if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) {
+ else if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) {
exit (1);
}
- if (_session && nsm) {
- _session->set_nsm_state( true );
- }
use_config ();
goto_editor_window ();
@@ -951,7 +964,7 @@ ARDOUR_UI::every_second ()
update_disk_space ();
update_timecode_format ();
- if (nsm) {
+ if (nsm && nsm->is_active () && nsm->session_loaded ()) {
nsm->check ();
if (!_was_dirty && _session->dirty ()) {
diff --git a/gtk2_ardour/nsm.cc b/gtk2_ardour/nsm.cc
index bd27fe532c..09449c5630 100644
--- a/gtk2_ardour/nsm.cc
+++ b/gtk2_ardour/nsm.cc
@@ -28,6 +28,7 @@
NSM_Client::NSM_Client()
{
+ _session_loaded = false;
}
int
@@ -49,9 +50,18 @@ NSM_Client::command_open(const char *name,
{
int r = ERR_OK;
- ARDOUR_COMMAND_LINE::new_session = false;
ARDOUR_COMMAND_LINE::session_name = name;
ARDOUR_COMMAND_LINE::jack_client_name = client_id;
+ ARDOUR_COMMAND_LINE::no_connect_ports = true;
+ if (ARDOUR_UI::instance()->get_session_parameters(true, false, "")) {
+ return ERR_GENERAL;
+ }
return r;
}
+
+void
+NSM_Client::command_session_is_loaded ( void )
+{
+ _session_loaded = true;
+}
diff --git a/gtk2_ardour/nsm.h b/gtk2_ardour/nsm.h
index 5491e1985f..a2b0c11151 100644
--- a/gtk2_ardour/nsm.h
+++ b/gtk2_ardour/nsm.h
@@ -28,12 +28,17 @@ class NSM_Client:public NSM::Client
NSM_Client();
~NSM_Client() { }
+ bool session_loaded(void) { return _session_loaded; }
+
protected:
+ bool _session_loaded;
+
int command_open(const char *name,
const char *display_name,
const char *client_id,
char **out_msg);
int command_save(char **out_msg);
+ void command_session_is_loaded (void);
};