diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 289b949c3d..085d851b27 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -691,6 +691,13 @@ ARDOUR_UI::get_transport_controllable_state () return *node; } +void +ARDOUR_UI::save_session_at_its_request (std::string snapshot_name) +{ + if (_session) { + _session->save_state (snapshot_name); + } +} gint ARDOUR_UI::autosave_session () diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 2e395f88bf..9623d4e51e 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -426,6 +426,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr int ask_about_saving_session (const std::vector& actions); + void save_session_at_its_request (std::string); /* periodic safety backup, to be precise */ gint autosave_session(); void update_autosave(); diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 000df5943c..b76aede272 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -151,8 +151,8 @@ ARDOUR_UI::set_session (Session *s) Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::audition_blink)); Blink.connect (sigc::mem_fun(*this, &ARDOUR_UI::feedback_blink)); - _session->SaveSession.connect_same_thread (_session_connections, boost::bind (&ARDOUR_UI::save_session_gui_state, this)); - + _session->SaveSessionUnderway.connect_same_thread (_session_connections, boost::bind (&ARDOUR_UI::save_session_gui_state, this)); + _session->SaveSessionRequested.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::save_session_at_its_request, this, _1), gui_context()); _session->RecordStateChanged.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::record_state_changed, this), gui_context()); _session->StepEditStatusChange.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::step_edit_status_change, this, _1), gui_context()); _session->TransportStateChange.connect (_session_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::map_transport_state, this), gui_context());