make more of an effort to ensure that the last element in Selection::tracks is the most-recently selected

This commit is contained in:
Paul Davis 2017-02-04 15:08:04 +01:00
parent 893d4e7a07
commit 8e06f43f80
1 changed files with 23 additions and 4 deletions

View File

@ -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;
}