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 touched; - if (_internal_editing) { - select_all_internal_edit (op); - return; + TrackViewList ts; + + if (selection->tracks.empty()) { + if (entered_track) { + ts.push_back (entered_track); + } else { + ts = track_views; + } + } else { + ts = selection->tracks; } - for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + if (_internal_editing) { + + bool midi_selected = false; + + for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) { + if ((*iter)->hidden()) { + continue; + } + + RouteTimeAxisView* rtav = dynamic_cast (*iter); + + if (rtav && rtav->is_midi_track()) { + midi_selected = true; + break; + } + } + + if (midi_selected) { + select_all_internal_edit (op); + return; + } + } + + 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: