diff options
author | Carl Hetherington <carl@carlh.net> | 2011-04-20 01:24:40 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-04-20 01:24:40 +0000 |
commit | 6abc468aeb253ba380fcba09e3c04d08a52b7a35 (patch) | |
tree | e42a5606aceead1f853401cb1f520f5461a4230d | |
parent | e157694c6786c4cc6233aa4481957ec1be349a41 (diff) |
Fix hang on session close that I introduced with the route group changes.
git-svn-id: svn://localhost/ardour2/branches/3.0@9388 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 5 |
2 files changed, 12 insertions, 6 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index e2c9932a40..295e956060 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -225,7 +225,7 @@ Mixer_UI::Mixer_UI () auto_rebinding = FALSE; - _in_group_rebuild = false; + _in_group_rebuild_or_clear = false; MixerStrip::CatchDeletion.connect (*this, invalidator (*this), ui_bind (&Mixer_UI::remove_strip, this, _1), gui_context()); @@ -507,9 +507,12 @@ Mixer_UI::set_session (Session* sess) void Mixer_UI::session_going_away () { - ENSURE_GUI_THREAD (*this, &Mixer_UI::session_going_away) + ENSURE_GUI_THREAD (*this, &Mixer_UI::session_going_away); + _in_group_rebuild_or_clear = true; group_model->clear (); + _in_group_rebuild_or_clear = false; + _selection.clear (); track_model->clear (); @@ -1106,7 +1109,7 @@ Mixer_UI::route_groups_changed () { ENSURE_GUI_THREAD (*this, &Mixer_UI::route_groups_changed); - _in_group_rebuild = true; + _in_group_rebuild_or_clear = true; /* just rebuild the while thing */ @@ -1123,7 +1126,7 @@ Mixer_UI::route_groups_changed () _session->foreach_route_group (sigc::mem_fun (*this, &Mixer_UI::add_route_group)); _group_tabs->set_dirty (); - _in_group_rebuild = false; + _in_group_rebuild_or_clear = false; } void @@ -1258,7 +1261,7 @@ Mixer_UI::route_group_row_change (const Gtk::TreeModel::Path&, const Gtk::TreeMo void Mixer_UI::route_group_row_deleted (Gtk::TreeModel::Path const &) { - if (_in_group_rebuild) { + if (_in_group_rebuild_or_clear) { return; } diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index a94226fc16..915b084dfa 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -259,7 +259,10 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR static const int32_t default_width = 478; static const int32_t default_height = 765; - bool _in_group_rebuild; + /** true if we are rebuilding the route group list, or clearing + it during a session teardown. + */ + bool _in_group_rebuild_or_clear; friend class MixerGroupTabs; }; |