diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2018-08-24 09:50:37 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2018-08-24 10:08:08 -0400 |
commit | 5ca53856ab9fed46b3c75a3a0113b5959cca3bc0 (patch) | |
tree | 7a3e4297cdc2c34da1a793774cd78b39a4c41f38 /gtk2_ardour | |
parent | 510a0314cf12b037f41538c8afab25b99bf55cb2 (diff) |
invert-selection: if tracks are selected, invert selection at that level, unless in internal edit mode
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index bc0a21c4e4..0d5909778a 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -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. |