ensure that most recently stripable is visible in editor
[ardour.git] / gtk2_ardour / editor_selection.cc
index ede87169e8190f9b302e0330a3cf1285df484c55..8cdf3940dc8de7fe17267d338d43ba1dc98435e7 100644 (file)
@@ -43,7 +43,7 @@
 #include "midi_region_view.h"
 #include "sfdb_ui.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -879,7 +879,12 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
                if (!regions.empty()) {
                        selection->add (regions);
                        commit = true;
+               } else if (selection->regions.empty() && !selection->selected (clicked_regionview)) {
+                       /* ensure that at least the clicked regionview is selected. */
+                       selection->set (clicked_regionview);
+                       commit = true;
                }
+
        }
 
 out:
@@ -957,7 +962,11 @@ Editor::track_selection_changed ()
        case 0:
                break;
        default:
-               set_selected_mixer_strip (*(selection->tracks.front()));
+               /* last element in selection list is the most recently
+                * selected, because we always append to that list.
+                */
+               set_selected_mixer_strip (*(selection->tracks.back()));
+               ensure_time_axis_view_is_visible (*(selection->tracks.back()), false);
                break;
        }
 
@@ -1088,7 +1097,6 @@ Editor::sensitize_all_region_actions (bool s)
 void
 Editor::sensitize_the_right_region_actions ()
 {
-
        RegionSelection rs = get_regions_from_selection_and_entered ();
        sensitize_all_region_actions (!rs.empty ());
 
@@ -1247,7 +1255,6 @@ Editor::sensitize_the_right_region_actions ()
                _region_actions->get_action("set-region-sync-position")->set_sensitive (false);
                _region_actions->get_action("trim-front")->set_sensitive (false);
                _region_actions->get_action("trim-back")->set_sensitive (false);
-               _region_actions->get_action("split-region")->set_sensitive (false);
                _region_actions->get_action("place-transient")->set_sensitive (false);
        }
 
@@ -1373,15 +1380,15 @@ Editor::region_selection_changed ()
        _regions->block_change_connection (false);
        editor_regions_selection_changed_connection.block(false);
 
-       if (!_all_region_actions_sensitized) {
-               /* This selection change might have changed what region actions
-                  are allowed, so sensitize them all in case a key is pressed.
-               */
-               sensitize_all_region_actions (true);
-       }
-
-       if (_session && !_session->transport_rolling() && !selection->regions.empty()) {
-               maybe_locate_with_edit_preroll (selection->regions.start());
+       if (selection->regions.empty()) {
+               sensitize_all_region_actions (false);
+       } else {
+               if (!_all_region_actions_sensitized) {
+                       /* This selection change might have changed what region actions
+                          are allowed, so sensitize them all in case a key is pressed.
+                       */
+                       sensitize_all_region_actions (true);
+               }
        }
 
        /* propagate into backend */
@@ -1566,7 +1573,7 @@ Editor::select_all_within (framepos_t start, framepos_t end, double top, double
 
        if (preserve_if_selected && op != Selection::Toggle) {
                list<Selectable*>::iterator i = found.begin();
-               while (i != found.end() && (*i)->get_selected()) {
+               while (i != found.end() && (*i)->selected()) {
                        ++i;
                }