summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_dialog.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-07-03 14:03:10 +0200
committerRobin Gareus <robin@gareus.org>2017-07-03 14:03:10 +0200
commitd9767b10ac4493cf1b76c6b8afd920e2584ef39e (patch)
treea24d43fdd187ff747bfd0b0e7d1dd324cbd5ae80 /gtk2_ardour/ardour_dialog.cc
parente9ee454cedda06403a57d1e17239fa2fbfb36638 (diff)
Fix another crash at exit.
During ARDOUR_UI::finish(), after destroying various instances: close_all_dialogs() -> ArdourDialog::on_response() -> GUIIdle() The event loop recurses and may execute a previously scheduled Editor::idle_visual_changer()
Diffstat (limited to 'gtk2_ardour/ardour_dialog.cc')
-rw-r--r--gtk2_ardour/ardour_dialog.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc
index c7d78099ce..1c9da0112f 100644
--- a/gtk2_ardour/ardour_dialog.cc
+++ b/gtk2_ardour/ardour_dialog.cc
@@ -68,6 +68,17 @@ ArdourDialog::on_response (int response_id)
}
void
+ArdourDialog::close_self ()
+{
+ /* Don't call Idle, don't pop splash.
+ * This is used at exit and session-close and invoked
+ * via close_all_dialogs.
+ */
+ hide ();
+ Gtk::Dialog::on_response (RESPONSE_CANCEL);
+}
+
+void
ArdourDialog::pop_splash ()
{
if (_splash_pushed) {
@@ -138,7 +149,7 @@ ArdourDialog::init ()
set_transient_for (*parent);
}
- ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL));
+ ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourDialog::close_self)); /* send a RESPONSE_CANCEL to self */
proxy = new WM::ProxyTemporary (get_title(), this);
WM::Manager::instance().register_window (proxy);