diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 85111c2b53..df03e955fa 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -260,6 +260,10 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) ARDOUR::Session::AskAboutSampleRateMismatch.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::sr_mismatch_dialog, this, _1, _2)); + /* handle requests to quit (coming from JACK session) */ + + ARDOUR::Session::Quit.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::finish, this), gui_context ()); + /* lets get this party started */ try { diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 93d15b8439..d10e01d18f 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -785,6 +785,9 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi void request_resume_timecode_transmission (); bool timecode_transmission_suspended () const; + /** Emitted when the session wants Ardour to quit */ + static PBD::Signal0 Quit; + protected: friend class AudioEngine; void set_block_size (nframes_t nframes); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index fb8649d1a0..8a3eb6a6c6 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -125,6 +125,7 @@ PBD::Signal0 Session::AutoBindingOn; PBD::Signal0 Session::AutoBindingOff; PBD::Signal2 Session::Exported; PBD::Signal1 > Session::AskAboutPlaylistDeletion; +PBD::Signal0 Session::Quit; static void clean_up_session_event (SessionEvent* ev) { delete ev; } const SessionEvent::RTeventCallback Session::rt_cleanup (clean_up_session_event); diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 097fd2a116..4ae4065329 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -746,7 +746,7 @@ Session::jack_session_event (jack_session_event_t * event) jack_session_reply (_engine.jack(), event); if (event->type == JackSessionSaveAndQuit) { - // TODO: make ardour quit. + Quit (); /* EMIT SIGNAL */ } jack_session_event_free( event );