invert-selection: if tracks are selected, invert selection at that level, unless...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 24 Aug 2018 13:50:37 +0000 (09:50 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 24 Aug 2018 14:08:08 +0000 (10:08 -0400)
gtk2_ardour/editor_selection.cc

index bc0a21c4e478a6d8f00754d0b15d3862f44daa47..0d5909778aff68b193fa75c60b8fd36952729788 100644 (file)
@@ -1159,7 +1159,7 @@ void
 Editor::track_selection_changed ()
 {
        /* reset paste count, so the plaste location doesn't get incremented
-        * if we want to paste in the same place, but different track. */ 
+        * if we want to paste in the same place, but different track. */
        paste_count = 0;
 
        if ( _session->solo_selection_active() )
@@ -1713,7 +1713,6 @@ Editor::invert_selection_in_track ()
 void
 Editor::invert_selection ()
 {
-       list<Selectable *> touched;
 
        if (internal_editing()) {
                for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
@@ -1725,16 +1724,35 @@ Editor::invert_selection ()
                return;
        }
 
-       for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
-               if ((*iter)->hidden()) {
-                       continue;
+       if (!selection->tracks.empty()) {
+
+               TrackViewList inverted;
+
+               for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+                       if (!(*iter)->selected()) {
+                               inverted.push_back (*iter);
+                       }
                }
-               (*iter)->get_inverted_selectables (*selection, touched);
-       }
 
-       begin_reversible_selection_op (X_("Invert Selection"));
-       selection->set (touched);
-       commit_reversible_selection_op ();
+               begin_reversible_selection_op (X_("Invert Track Selection"));
+               selection->set (inverted);
+               commit_reversible_selection_op ();
+
+       } else {
+
+               list<Selectable *> touched;
+
+               for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+                       if ((*iter)->hidden()) {
+                               continue;
+                       }
+                       (*iter)->get_inverted_selectables (*selection, touched);
+               }
+
+               begin_reversible_selection_op (X_("Invert ObjectSelection"));
+               selection->set (touched);
+               commit_reversible_selection_op ();
+       }
 }
 
 /** @param start Start time in session samples.