summaryrefslogtreecommitdiff
path: root/gtk2_ardour/route_group_menu.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-01-13 01:40:07 +0000
committerCarl Hetherington <carl@carlh.net>2010-01-13 01:40:07 +0000
commit9e0d03020ff47773f7d1c0414de1c74e6c9e0dac (patch)
treec4b53b988408727203551373084fafe2e5f5d4f5 /gtk2_ardour/route_group_menu.cc
parent92fbcd021d7d29390227521aa8c41ac273c99e04 (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
Diffstat (limited to 'gtk2_ardour/route_group_menu.cc')
-rw-r--r--gtk2_ardour/route_group_menu.cc21
1 files changed, 20 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