13
0

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

View File

@ -41,22 +41,41 @@ TrackSelection::~TrackSelection ()
TrackViewList TrackViewList
TrackSelection::add (TrackViewList const & t) TrackSelection::add (TrackViewList const & t)
{ {
TrackViewList added = TrackViewList::add (t); TrackViewList added;
for (TrackSelection::const_iterator i = t.begin(); i != t.end(); ++i) { for (TrackSelection::const_iterator i = t.begin(); i != t.end(); ++i) {
/* select anything in the same select-enabled route group */ /* select anything in the same select-enabled route group */
ARDOUR::RouteGroup* rg = (*i)->route_group (); ARDOUR::RouteGroup* rg = (*i)->route_group ();
if (rg && rg->is_active() && rg->is_select ()) { if (rg && rg->is_active() && rg->is_select ()) {
TrackViewList tr = _editor->axis_views_from_routes (rg->route_list ()); TrackViewList tr = _editor->axis_views_from_routes (rg->route_list ());
for (TrackViewList::iterator j = tr.begin(); j != tr.end(); ++j) { for (TrackViewList::iterator j = tr.begin(); j != tr.end(); ++j) {
if (!contains (*j)) {
added.push_back (*j); /* Do not add the trackview passed in as an
push_back (*j); * 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; return added;
} }