diff options
author | Robin Gareus <robin@gareus.org> | 2017-07-03 14:03:10 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-07-03 14:03:10 +0200 |
commit | d9767b10ac4493cf1b76c6b8afd920e2584ef39e (patch) | |
tree | a24d43fdd187ff747bfd0b0e7d1dd324cbd5ae80 /gtk2_ardour/ardour_dialog.cc | |
parent | e9ee454cedda06403a57d1e17239fa2fbfb36638 (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.cc | 13 |
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); |