summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2018-08-24 09:50:37 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2018-08-24 10:08:08 -0400
commit5ca53856ab9fed46b3c75a3a0113b5959cca3bc0 (patch)
tree7a3e4297cdc2c34da1a793774cd78b39a4c41f38 /gtk2_ardour
parent510a0314cf12b037f41538c8afab25b99bf55cb2 (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.cc38
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.