X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Froute_group_menu.cc;h=baf383be5d2f669f57431643752444cb5252f8cb;hb=92e412661772e6b9c83109b7ee4996f4c040d3f4;hp=7e05c26fe3d63414a559793806c9291cf0d8b52e;hpb=f6fdd8dcbf41f864e9f0cc32dabe81fe3533ddfe;p=ardour.git diff --git a/gtk2_ardour/route_group_menu.cc b/gtk2_ardour/route_group_menu.cc index 7e05c26fe3..baf383be5d 100644 --- a/gtk2_ardour/route_group_menu.cc +++ b/gtk2_ardour/route_group_menu.cc @@ -27,19 +27,31 @@ using namespace Gtk; using namespace ARDOUR; +using namespace PBD; -RouteGroupMenu::RouteGroupMenu (Session* s, RouteGroup::Property p) +RouteGroupMenu::RouteGroupMenu (Session* s, PropertyList* plist) : SessionHandlePtr (s) - , _default_properties (p) + , _default_properties (plist) + , _inhibit_group_selected (false) + , _selected_route_group (0) { rebuild (0); } +RouteGroupMenu::~RouteGroupMenu() +{ + delete _default_properties; +} + void 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 +67,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 +86,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 @@ -82,7 +107,8 @@ RouteGroupMenu::new_group () return; } - RouteGroup* g = new RouteGroup (*_session, "", RouteGroup::Active, _default_properties); + RouteGroup* g = new RouteGroup (*_session, ""); + g->set_properties (*_default_properties); RouteGroupDialog d (g, Gtk::Stock::NEW); int const r = d.do_run ();