maintain CoreSelection order in GUI track selection
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 5 May 2017 15:34:32 +0000 (16:34 +0100)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 5 May 2017 17:56:25 +0000 (18:56 +0100)
gtk2_ardour/selection.cc

index 23d89d0786049eb721689ef27e96eee09f6f6213..54dc7a664427b6258b405208b6be5f22b52bc790 100644 (file)
@@ -1640,37 +1640,21 @@ Selection::core_selection_changed (PropertyChange const & what_changed)
 
        tracks.clear (); // clear stage for whatever tracks are now selected (maybe none)
 
-       TrackViewList const & tvl (editor->get_track_views ());
-
-       for (TrackViewList::const_iterator x = tvl.begin(); x != tvl.end(); ++x) {
-
-               boost::shared_ptr<Stripable> s = (*x)->stripable ();
-               boost::shared_ptr<AutomationControl> c = (*x)->control ();
-
-               if (!s) {
-                       continue;
-               }
-
-               TimeAxisView* tav = editor->time_axis_view_from_stripable (s);
-
-               if (!tav) {
-                       continue;
+       CoreSelection::StripableAutomationControls sac;
+       selection.get_stripables (sac);
+
+       for (CoreSelection::StripableAutomationControls::const_iterator i = sac.begin(); i != sac.end(); ++i) {
+               AxisView* av;
+               TimeAxisView* tav;
+               if ((*i).controllable) {
+                       av = editor->axis_view_by_control ((*i).controllable);
+               } else {
+                       av = editor->axis_view_by_stripable ((*i).stripable);
                }
 
-               if ((c && selection.selected (c)) || selection.selected (s)) {
+               tav = dynamic_cast<TimeAxisView*>(av);
+               if (tav) {
                        tracks.push_back (tav);
                }
-
-               TimeAxisView::Children kids = tav->get_child_list ();
-
-               for (TimeAxisView::Children::iterator j = kids.begin(); j != kids.end(); ++j) {
-                       s = (*j)->stripable ();
-                       c = (*j)->control ();
-
-                       if ((c && selection.selected (c)) || selection.selected (s)) {
-                               tracks.push_back ((*j).get());
-                       }
-               }
-
        }
 }