assert() to help find some possible causes of #2991. Fix some confusion with GTK...
authorCarl Hetherington <carl@carlh.net>
Wed, 13 Jan 2010 01:40:07 +0000 (01:40 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 13 Jan 2010 01:40:07 +0000 (01:40 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6482 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/route_group_menu.cc
gtk2_ardour/route_group_menu.h
libs/ardour/route_group.cc

index 7e05c26fe3d63414a559793806c9291cf0d8b52e..c8ef0a260b1485789470b0c796ad088c53fae803 100644 (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
index 7b9e539ecbf3b85f0b4bc3197c1c6c6ff8d7803d..1fbbbcf7b39b3830a345f54a8c3ab4df7c930e47 100644 (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__ */
index d59ec82236328d1fde86715daaeb4ec97a49249c..f1a3a67a89cb9266410777b58ba4117166833441 100644 (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);