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()
This commit is contained in:
parent
e9ee454ced
commit
d9767b10ac
|
@ -67,6 +67,17 @@ ArdourDialog::on_response (int response_id)
|
||||||
Gtk::Dialog::on_response (response_id);
|
Gtk::Dialog::on_response (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
|
void
|
||||||
ArdourDialog::pop_splash ()
|
ArdourDialog::pop_splash ()
|
||||||
{
|
{
|
||||||
|
@ -138,7 +149,7 @@ ArdourDialog::init ()
|
||||||
set_transient_for (*parent);
|
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);
|
proxy = new WM::ProxyTemporary (get_title(), this);
|
||||||
WM::Manager::instance().register_window (proxy);
|
WM::Manager::instance().register_window (proxy);
|
||||||
|
|
|
@ -51,6 +51,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void pop_splash ();
|
void pop_splash ();
|
||||||
|
void close_self ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WM::ProxyTemporary* proxy;
|
WM::ProxyTemporary* proxy;
|
||||||
|
|
|
@ -53,6 +53,9 @@ Editor::set_video_timeline_height (const int h)
|
||||||
void
|
void
|
||||||
Editor::update_video_timeline (bool flush)
|
Editor::update_video_timeline (bool flush)
|
||||||
{
|
{
|
||||||
|
// catch GUIIdle -> Editor::idle_visual_changer during quit/close
|
||||||
|
assert (ARDOUR_UI::instance()->video_timeline);
|
||||||
|
|
||||||
if (flush) {
|
if (flush) {
|
||||||
ARDOUR_UI::instance()->video_timeline->flush_local_cache();
|
ARDOUR_UI::instance()->video_timeline->flush_local_cache();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user