X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftrack_selection.cc;h=ac3d8b68e52b891e8833b86e9267a69915be891c;hb=8d8666d041f0d0336a48389176ec0631c45cc6ff;hp=92efbd48633341a2dac34d602bc96d33550ff1a9;hpb=31d234b48c36bddb4d5228a3abee9c4419403879;p=ardour.git diff --git a/gtk2_ardour/track_selection.cc b/gtk2_ardour/track_selection.cc index 92efbd4863..ac3d8b68e5 100644 --- a/gtk2_ardour/track_selection.cc +++ b/gtk2_ardour/track_selection.cc @@ -18,10 +18,14 @@ */ #include + #include "ardour/route_group.h" +#include "control_protocol/control_protocol.h" + #include "track_selection.h" #include "time_axis_view.h" #include "public_editor.h" +#include "vca_time_axis.h" using namespace std; @@ -38,23 +42,44 @@ 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) { + if (dynamic_cast (*i)) { + continue; + } /* 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; } -