From c0d91362cf021a9ed5012ccd310da6c00a0ad4ea Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 9 Oct 2023 17:19:17 +0200 Subject: [PATCH] Fix duplicate close-session dialog on macOS Previously [GtkApplicationDelegate applicationShouldTerminate:] triggered both StartupFSM::queue_finish and ArdourUI::queue_finish. Both of which registered an idle-callback to call ArdourUI::finish. --- gtk2_ardour/startup_fsm.cc | 2 +- gtk2_ardour/startup_fsm.h | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/startup_fsm.cc b/gtk2_ardour/startup_fsm.cc index 226bf290f8..de739b2272 100644 --- a/gtk2_ardour/startup_fsm.cc +++ b/gtk2_ardour/startup_fsm.cc @@ -98,7 +98,7 @@ StartupFSM::StartupFSM (EngineControl& amd) Application* app = Application::instance (); - app->ShouldQuit.connect (sigc::mem_fun (*this, &StartupFSM::queue_finish)); + app_quit_connection = app->ShouldQuit.connect (sigc::mem_fun (*this, &StartupFSM::queue_finish)); Gtkmm2ext::Keyboard::HideMightMeanQuit.connect (sigc::mem_fun (*this, &StartupFSM::dialog_hidden)); } diff --git a/gtk2_ardour/startup_fsm.h b/gtk2_ardour/startup_fsm.h index 519ada8ec0..50a06da1e2 100644 --- a/gtk2_ardour/startup_fsm.h +++ b/gtk2_ardour/startup_fsm.h @@ -85,7 +85,10 @@ class StartupFSM : public sigc::trackable void handle_path (std::string const & path); bool complete() const { return _state == NotWaiting; } - void set_complete () { _state = NotWaiting; } + void set_complete () { + app_quit_connection.disconnect (); + _state = NotWaiting; + } private: bool new_user; @@ -126,6 +129,7 @@ class StartupFSM : public sigc::trackable PluginScanDialog* plugin_scan_dialog; sigc::connection current_dialog_connection; + sigc::connection app_quit_connection; sigc::signal1 _signal_response;