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
This commit is contained in:
Carl Hetherington
2010-01-13 01:40:07 +00:00
parent 92fbcd021d
commit 9e0d03020f
3 changed files with 24 additions and 1 deletions

View File

@@ -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

View File

@@ -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__ */

View File

@@ -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);