summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_selection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r--gtk2_ardour/editor_selection.cc37
1 files changed, 34 insertions, 3 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 7b08eaeaa6..ffce8af25f 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -1354,17 +1354,48 @@ Editor::select_all (Selection::Operation op)
{
list<Selectable *> touched;
+ TrackViewList ts;
+
+ if (selection->tracks.empty()) {
+ if (entered_track) {
+ ts.push_back (entered_track);
+ } else {
+ ts = track_views;
+ }
+ } else {
+ ts = selection->tracks;
+ }
+
if (_internal_editing) {
- select_all_internal_edit (op);
- return;
+
+ bool midi_selected = false;
+
+ for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
+ if ((*iter)->hidden()) {
+ continue;
+ }
+
+ RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*iter);
+
+ if (rtav && rtav->is_midi_track()) {
+ midi_selected = true;
+ break;
+ }
+ }
+
+ if (midi_selected) {
+ select_all_internal_edit (op);
+ return;
+ }
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+ for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (0, max_framepos, 0, DBL_MAX, touched);
}
+
begin_reversible_command (_("select all"));
switch (op) {
case Selection::Add: