diff options
author | Robin Gareus <robin@gareus.org> | 2016-07-18 23:51:10 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-07-18 23:52:40 +0200 |
commit | 901f8caf22b172db674579257744e25891fd1b83 (patch) | |
tree | 6c6c747caef2fd69609de9cea5c209c679a7b592 | |
parent | a450024c56a6a023a985adea4c542f9cc02dd6f3 (diff) |
add a plugin-death connection
at application exit, there may otherwise be a race condition,
queue draw could be scheduled for a widget that's no longer present.
-rw-r--r-- | gtk2_ardour/processor_box.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index c01d9e497c..4ba27f10a6 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -1518,6 +1518,7 @@ ProcessorEntry::PluginDisplay::PluginDisplay (ProcessorEntry& e, boost::shared_p { set_name ("processor prefader"); add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + _plug->DropReferences.connect (_death_connection, invalidator (*this), boost::bind (&PluginDisplay::plugin_going_away, this), gui_context()); _plug->QueueDraw.connect (_qdraw_connection, invalidator (*this), boost::bind (&Gtk::Widget::queue_draw, this), gui_context ()); diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 27c529980f..5dd7483be4 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -250,12 +250,17 @@ private: bool on_button_press_event (GdkEventButton *ev); bool on_button_release_event (GdkEventButton *ev); + void plugin_going_away () { + _qdraw_connection.disconnect (); + } + void update_height_alloc (uint32_t inline_height); virtual uint32_t render_inline (cairo_t *, uint32_t width); ProcessorEntry& _entry; boost::shared_ptr<ARDOUR::Plugin> _plug; PBD::ScopedConnection _qdraw_connection; + PBD::ScopedConnection _death_connection; cairo_surface_t* _surf; uint32_t _max_height; uint32_t _cur_height; |