diff --git a/gtk2_ardour/route_group_menu.cc b/gtk2_ardour/route_group_menu.cc index db50a2725c..5b83ed6bf7 100644 --- a/gtk2_ardour/route_group_menu.cc +++ b/gtk2_ardour/route_group_menu.cc @@ -85,7 +85,8 @@ RouteGroupMenu::build (WeakRouteList const & s) items.push_back (MenuElem (_("New Group..."), sigc::mem_fun (*this, &RouteGroupMenu::new_group))); if (groups.size() == 1 && *groups.begin() != 0) { - items.push_back (MenuElem (_("Edit Group..."), sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::edit_group), *groups.begin ()))); + std::weak_ptr wg (*groups.begin ()); + items.push_back (MenuElem (_("Edit Group..."), sigc::bind (sigc::mem_fun (*this, &RouteGroupMenu::edit_group), wg))); } items.push_back (SeparatorElem ()); @@ -122,7 +123,7 @@ RouteGroupMenu::add_item (std::shared_ptr rg, std::set (&items.back ()); std::weak_ptr wg (rg); - i->signal_activate().connect ([wg, i, this]() { std::shared_ptr g (wg.lock()); if (g) { set_group (i, g); }}); + i->signal_activate().connect ([=]() { if (!i->get_active()) { return; } std::shared_ptr g (wg.lock()); if (g) { set_group (i, g); }}); if (groups.size() == 1 && *groups.begin() == rg) { /* there's only one active group, and it's this one */ @@ -189,8 +190,12 @@ RouteGroupMenu::new_group_dialog_finished (int r, RouteGroupDialog* d) } void -RouteGroupMenu::edit_group (std::shared_ptr g) +RouteGroupMenu::edit_group (std::weak_ptr wg) { + std::shared_ptr g (wg.lock()); + if (!g) { + return; + } RouteGroupDialog* d = new RouteGroupDialog (g, false); d->signal_response().connect (sigc::hide (sigc::bind (sigc::ptr_fun (&delete_when_idle), d))); d->present (); diff --git a/gtk2_ardour/route_group_menu.h b/gtk2_ardour/route_group_menu.h index 16b7c6672a..cbb71ef602 100644 --- a/gtk2_ardour/route_group_menu.h +++ b/gtk2_ardour/route_group_menu.h @@ -40,7 +40,7 @@ public: private: void add_item (std::shared_ptr, std::set> const &, Gtk::RadioMenuItem::Group*); void new_group (); - void edit_group (std::shared_ptr); + void edit_group (std::weak_ptr); void set_group (Gtk::RadioMenuItem*, std::shared_ptr); void new_group_dialog_finished (int, RouteGroupDialog*);