* bugfix from http://tracker.ardour.org/view.php?id=2155 thanks to kristian: fix...
[ardour.git] / gtk2_ardour / editor_selection.cc
index 6cd022cce185f53f9d8b73e88bdf7f52fe3a3a8e..7c36384e3050e8f601164bb19b124b079c0e39af 100644 (file)
@@ -25,6 +25,7 @@
 #include <ardour/diskstream.h>
 #include <ardour/playlist.h>
 #include <ardour/route_group.h>
+#include <ardour/profile.h>
 
 #include "editor.h"
 #include "actions.h"
@@ -761,11 +762,17 @@ Editor::track_selection_changed ()
                        (*i)->set_selected (false);
                }
        }
+
+       ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
 }
 
 void
 Editor::time_selection_changed ()
 {
+       if (Profile->get_sae()) {
+               return;
+       }
+
        for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
                (*i)->hide_selection ();
        }
@@ -788,6 +795,30 @@ Editor::time_selection_changed ()
 
 }
 
+void
+Editor::sensitize_the_right_region_actions (bool have_selected_regions)
+{
+       for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::region_selection_sensitive_actions.begin();
+            x != ActionManager::region_selection_sensitive_actions.end(); ++x) {
+
+               string accel_path = (*x)->get_accel_path ();
+               AccelKey key;
+
+               /* if there is an accelerator, it should always be sensitive
+                  to allow for keyboard ops on entered regions.
+               */
+
+               bool known = ActionManager::lookup_entry (accel_path, key);
+
+               if (known && ((key.get_key() != GDK_VoidSymbol) && (key.get_key() != 0))) {
+                       (*x)->set_sensitive (true);
+               } else {
+                       (*x)->set_sensitive (have_selected_regions);
+               }
+       }
+}
+
+
 void
 Editor::region_selection_changed ()
 {
@@ -795,6 +826,8 @@ Editor::region_selection_changed ()
                (*i)->set_selected_regionviews (selection->regions);
        }
        
+       sensitize_the_right_region_actions (!selection->regions.empty());
+
        zoomed_to_region = false;
 }
 
@@ -961,7 +994,9 @@ Editor::set_selection_from_region ()
        }
 
        selection->set (0, selection->regions.start(), selection->regions.end_frame());
-       set_mouse_mode (Editing::MouseRange, false);
+       if (!Profile->get_sae()) {
+               set_mouse_mode (Editing::MouseRange, false);
+       }
 }
 
 void
@@ -994,7 +1029,9 @@ Editor::set_selection_from_range (Location& loc)
        selection->set (0, loc.start(), loc.end());
        commit_reversible_command ();
 
-       set_mouse_mode (Editing::MouseRange, false);
+       if (!Profile->get_sae()) {
+               set_mouse_mode (Editing::MouseRange, false);
+       }
 }
 
 void
@@ -1307,6 +1344,12 @@ Editor::get_edit_op_range (nframes64_t& start, nframes64_t& end) const
                swap (start, end);
        }
 
+       /* turn range into one delimited by start...end,
+          not start...end-1
+       */
+
+       end++;
+
        return true;
 }