diff --git a/gtk2_ardour/track_selection.cc b/gtk2_ardour/track_selection.cc index 6937eb623d..8b065faef3 100644 --- a/gtk2_ardour/track_selection.cc +++ b/gtk2_ardour/track_selection.cc @@ -41,22 +41,41 @@ TrackSelection::~TrackSelection () TrackViewList TrackSelection::add (TrackViewList const & t) { - TrackViewList added = TrackViewList::add (t); + TrackViewList added; for (TrackSelection::const_iterator i = t.begin(); i != t.end(); ++i) { /* select anything in the same select-enabled route group */ ARDOUR::RouteGroup* rg = (*i)->route_group (); + if (rg && rg->is_active() && rg->is_select ()) { + TrackViewList tr = _editor->axis_views_from_routes (rg->route_list ()); + for (TrackViewList::iterator j = tr.begin(); j != tr.end(); ++j) { - if (!contains (*j)) { - added.push_back (*j); - push_back (*j); + + /* Do not add the trackview passed in as an + * argument, because we want that to be on the + * end of the list. + */ + + if (*j != *i) { + if (!contains (*j)) { + added.push_back (*j); + push_back (*j); + } } } } + + /* now add the the trackview's passed in as actual arguments */ + + if (!contains (*i)) { + added.push_back (*i); + push_back (*i); + } } + return added; }