make more of an effort to ensure that the last element in Selection::tracks is the...
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 4 Feb 2017 14:08:04 +0000 (15:08 +0100)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 4 Feb 2017 14:08:22 +0000 (15:08 +0100)
gtk2_ardour/track_selection.cc

index 6937eb623d904e59c2efee001527bccee13f0cb9..8b065faef31b66f44ff5d15f5c62e69740166c1a 100644 (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;
 }