diff options
author | Carl Hetherington <carl@carlh.net> | 2010-01-13 01:40:07 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-01-13 01:40:07 +0000 |
commit | 9e0d03020ff47773f7d1c0414de1c74e6c9e0dac (patch) | |
tree | c4b53b988408727203551373084fafe2e5f5d4f5 | |
parent | 92fbcd021d7d29390227521aa8c41ac273c99e04 (diff) |
assert() to help find some possible causes of #2991. Fix some confusion with GTK signal emission from RadioMenuElems as applied to route group selection.
git-svn-id: svn://localhost/ardour2/branches/3.0@6482 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/route_group_menu.cc | 21 | ||||
-rw-r--r-- | gtk2_ardour/route_group_menu.h | 2 | ||||
-rw-r--r-- | libs/ardour/route_group.cc | 2 |
3 files changed, 24 insertions, 1 deletions
diff --git a/gtk2_ardour/route_group_menu.cc b/gtk2_ardour/route_group_menu.cc index 7e05c26fe3..c8ef0a260b 100644 --- a/gtk2_ardour/route_group_menu.cc +++ b/gtk2_ardour/route_group_menu.cc @@ -31,6 +31,8 @@ using namespace ARDOUR; RouteGroupMenu::RouteGroupMenu (Session* s, RouteGroup::Property p) : SessionHandlePtr (s) , _default_properties (p) + , _inhibit_group_selected (false) + , _selected_route_group (0) { rebuild (0); } @@ -40,6 +42,10 @@ RouteGroupMenu::rebuild (RouteGroup* curr) { using namespace Menu_Helpers; + _selected_route_group = curr; + + _inhibit_group_selected = true; + items().clear (); items().push_back (MenuElem (_("New group..."), sigc::mem_fun (*this, &RouteGroupMenu::new_group))); @@ -55,6 +61,8 @@ RouteGroupMenu::rebuild (RouteGroup* curr) if (_session) { _session->foreach_route_group (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::add_item), curr, &group)); } + + _inhibit_group_selected = false; } void @@ -72,7 +80,18 @@ RouteGroupMenu::add_item (RouteGroup* rg, RouteGroup* curr, RadioMenuItem::Group void RouteGroupMenu::set_group (RouteGroup* g) { - GroupSelected (g); + if (g == _selected_route_group) { + /* cut off the signal_toggled that GTK emits for an option that is being un-selected + when a new option is being selected instead + */ + return; + } + + if (!_inhibit_group_selected) { + GroupSelected (g); + } + + _selected_route_group = g; } void diff --git a/gtk2_ardour/route_group_menu.h b/gtk2_ardour/route_group_menu.h index 7b9e539ecb..1fbbbcf7b3 100644 --- a/gtk2_ardour/route_group_menu.h +++ b/gtk2_ardour/route_group_menu.h @@ -39,6 +39,8 @@ public: void set_group (ARDOUR::RouteGroup *); ARDOUR::RouteGroup::Property _default_properties; + bool _inhibit_group_selected; + ARDOUR::RouteGroup* _selected_route_group; }; #endif /* __ardour_gtk_route_group_menu_h__ */ diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index d59ec82236..f1a3a67a89 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -71,6 +71,8 @@ RouteGroup::set_name (string str) int RouteGroup::add (boost::shared_ptr<Route> r) { + assert (find (routes->begin(), routes->end(), r) == routes->end ()); + r->leave_route_group (); routes->push_back (r); |