Fix ExportFormatSpecification copy-c'tor
[ardour.git] / gtk2_ardour / route_group_menu.cc
index 4793588cee2842e476b908d069fa40978572a492..63577392a779ab5b39dd48c3eca61754d3db04e6 100644 (file)
@@ -29,7 +29,7 @@
 #include "route_group_menu.h"
 #include "route_group_dialog.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace Gtk;
 using namespace ARDOUR;
@@ -88,7 +88,7 @@ RouteGroupMenu::build (WeakRouteList const & s)
        RadioMenuItem::Group group;
        items.push_back (RadioMenuElem (group, _("No Group")));
        RadioMenuItem* i = static_cast<RadioMenuItem *> (&items.back ());
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::set_group), (RouteGroup *) 0));
+       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::set_group), i, (RouteGroup *) 0));
 
        if (groups.size() == 1 && *groups.begin() == 0) {
                i->set_active ();
@@ -116,7 +116,7 @@ RouteGroupMenu::add_item (RouteGroup* rg, std::set<RouteGroup*> const & groups,
 
        items.push_back (RadioMenuElem (*group, rg->name()));
        RadioMenuItem* i = static_cast<RadioMenuItem*> (&items.back ());
-       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::set_group), rg));
+       i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::set_group), i, rg));
 
        if (groups.size() == 1 && *groups.begin() == rg) {
                /* there's only one active group, and it's this one */
@@ -131,11 +131,14 @@ RouteGroupMenu::add_item (RouteGroup* rg, std::set<RouteGroup*> const & groups,
  *  @param Group, or 0 for none.
  */
 void
-RouteGroupMenu::set_group (RouteGroup* g)
+RouteGroupMenu::set_group (Gtk::RadioMenuItem* e, RouteGroup* g)
 {
        if (_inhibit_group_selected) {
                return;
        }
+       if (e && !e->get_active()) {
+               return;
+       }
 
        for (WeakRouteList::const_iterator i = _subject.begin(); i != _subject.end(); ++i) {
                boost::shared_ptr<Route> r = i->lock ();
@@ -165,6 +168,7 @@ RouteGroupMenu::new_group ()
        RouteGroupDialog* d = new RouteGroupDialog (g, true);
 
        d->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::new_group_dialog_finished), d));
+       d->present ();
 }
 
 void
@@ -172,7 +176,7 @@ RouteGroupMenu::new_group_dialog_finished (int r, RouteGroupDialog* d)
 {
        if (r == RESPONSE_OK) {
                _session->add_route_group (d->group());
-               set_group (d->group());
+               set_group (0, d->group());
        } else {
                delete d->group ();
        }