splice mode is undefined, undocumented, and buggy. ripple does most of what we want...
[ardour.git] / gtk2_ardour / editor_actions.cc
index 8c81a6122e83df2c2d6d3d0d1ac5e384d34abab3..f49fd06906f67191880bd8f4fc98ca6593f30e03 100644 (file)
@@ -30,6 +30,9 @@
 #include "ardour/session.h"
 #include "ardour/types.h"
 
+#include "canvas/canvas.h"
+#include "canvas/pixbuf.h"
+
 #include "actions.h"
 #include "ardour_ui.h"
 #include "editing.h"
@@ -47,6 +50,7 @@ using namespace Gtk;
 using namespace Glib;
 using namespace std;
 using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using namespace Editing;
 
@@ -147,6 +151,11 @@ Editor::register_actions ()
 
        ActionManager::register_action (editor_actions, "escape", _("Break drag or deselect all"), sigc::mem_fun (*this, &Editor::escape));
 
+       /* We don't bother registering "unlock" because it would be insensitive
+          when required. Editor::unlock() must be invoked directly.
+       */
+       ActionManager::register_action (editor_actions, "lock", _("Lock"), sigc::mem_fun (*this, &Editor::lock));
+
        toggle_reg_sens (editor_actions, "show-editor-mixer", _("Show Editor Mixer"), sigc::mem_fun (*this, &Editor::editor_mixer_button_toggled));
        toggle_reg_sens (editor_actions, "show-editor-list", _("Show Editor List"), sigc::mem_fun (*this, &Editor::editor_list_button_toggled));
 
@@ -411,49 +420,49 @@ Editor::register_actions ()
        smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
        smart_mode_button.set_related_action (smart_mode_action);
        smart_mode_button.set_text (_("Smart"));
-       smart_mode_button.add_elements ( ArdourButton::FlatFace );
+       smart_mode_button.add_elements ( ArdourButton::Inset );
        smart_mode_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
        mouse_move_button.set_related_action (act);
        mouse_move_button.set_image (::get_icon("tool_object"));
-       mouse_move_button.add_elements ( ArdourButton::FlatFace );
+       mouse_move_button.add_elements ( ArdourButton::Inset );
        mouse_move_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));        
        mouse_select_button.set_related_action (act);
        mouse_select_button.set_image (::get_icon("tool_range"));
-       mouse_select_button.add_elements ( ArdourButton::FlatFace );
+       mouse_select_button.add_elements ( ArdourButton::Inset );
        mouse_select_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseDraw));   
        mouse_draw_button.set_related_action (act);
        mouse_draw_button.set_image (::get_icon("midi_tool_pencil"));
-       mouse_draw_button.add_elements ( ArdourButton::FlatFace );
+       mouse_draw_button.add_elements ( ArdourButton::Inset );
        mouse_draw_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-gain", _("Gain Tool"), sigc::bind (mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseGain)); 
        mouse_gain_button.set_related_action (act);
        mouse_gain_button.set_image (::get_icon("tool_gain"));
-       mouse_gain_button.add_elements ( ArdourButton::FlatFace );
+       mouse_gain_button.add_elements ( ArdourButton::Inset );
        mouse_gain_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-zoom", _("Zoom Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseZoom));   
        mouse_zoom_button.set_related_action (act);
        mouse_zoom_button.set_image (::get_icon("tool_zoom"));
-       mouse_zoom_button.add_elements ( ArdourButton::FlatFace );
+       mouse_zoom_button.add_elements ( ArdourButton::Inset );
        mouse_zoom_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));       
        mouse_audition_button.set_related_action (act);
        mouse_audition_button.set_image (::get_icon("tool_audition"));
-       mouse_audition_button.add_elements ( ArdourButton::FlatFace );
+       mouse_audition_button.add_elements ( ArdourButton::Inset );
        mouse_audition_button.set_name ("mouse mode button");
 
        act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));    
        mouse_timefx_button.set_related_action (act);
        mouse_timefx_button.set_image (::get_icon("tool_stretch"));
-       mouse_timefx_button.add_elements ( ArdourButton::FlatFace );
+       mouse_timefx_button.add_elements ( ArdourButton::Inset );
        mouse_timefx_button.set_name ("mouse mode button");
 
        ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), sigc::bind (sigc::mem_fun(*this, &Editor::step_mouse_mode), true));
@@ -461,7 +470,7 @@ Editor::register_actions ()
        act = ActionManager::register_toggle_action (mouse_mode_actions, "toggle-internal-edit", _("Edit MIDI"), sigc::mem_fun(*this, &Editor::toggle_internal_editing));
        internal_edit_button.set_related_action (act);
        internal_edit_button.set_image (::get_icon("tool_note"));
-       internal_edit_button.add_elements ( ArdourButton::FlatFace );
+       internal_edit_button.add_elements ( ArdourButton::Inset );
        internal_edit_button.set_name ("mouse mode button");
 
        RadioAction::Group edit_point_group;
@@ -471,9 +480,9 @@ Editor::register_actions ()
 
        ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change Edit Point"), sigc::bind (sigc::mem_fun (*this, &Editor::cycle_edit_point), false));
        ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change Edit Point Including Marker"), sigc::bind (sigc::mem_fun (*this, &Editor::cycle_edit_point), true));
-       if (!Profile->get_sae()) {
-               ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Splice));
-       }
+
+//     ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Splice));
+       ActionManager::register_action (editor_actions, "set-edit-ripple", _("Ripple"), bind (mem_fun (*this, &Editor::set_edit_mode), Ripple));
        ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Slide));
        ActionManager::register_action (editor_actions, "set-edit-lock", _("Lock"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Lock));
        ActionManager::register_action (editor_actions, "toggle-edit-mode", _("Toggle Edit Mode"), sigc::mem_fun (*this, &Editor::cycle_edit_mode));
@@ -543,7 +552,6 @@ Editor::register_actions ()
        ruler_samples_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_samples)));
        ruler_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_timecode)));
        ruler_minsec_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Min:Sec"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_minsec)));
-#ifdef WITH_VIDEOTIMELINE
 
        ActionManager::register_action (editor_menu_actions, X_("VideoMonitorMenu"), _("Video Monitor"));
 
@@ -552,22 +560,40 @@ Editor::register_actions ()
 
        xjadeo_ontop_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-ontop"), _("Always on Top"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 1)));
        xjadeo_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-timecode"), _("Timecode"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 2)));
-       xjadeo_frame_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-frame"), _("Framenumber"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 3)));
+       xjadeo_frame_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-frame"), _("Frame number"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 3)));
        xjadeo_osdbg_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-osdbg"), _("Timecode Background"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 4)));
        xjadeo_fullscreen_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-fullscreen"), _("Fullscreen"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 5)));
-
-#endif
+       xjadeo_letterbox_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-letterbox"), _("Letterbox"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 6)));
+       xjadeo_zoom_100 = reg_sens (editor_actions, "zoom-vmon-100", _("Original Size"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 7));
 
        /* set defaults here */
 
        no_ruler_shown_update = true;
-       ruler_meter_action->set_active (true);
-       ruler_tempo_action->set_active (true);
-       ruler_marker_action->set_active (true);
-       ruler_range_action->set_active (true);
-       ruler_loop_punch_action->set_active (true);
-       ruler_loop_punch_action->set_active (true);
-#ifdef WITH_VIDEOTIMELINE
+       
+       if (Profile->get_trx()) {
+               ruler_marker_action->set_active (true);
+               ruler_meter_action->set_active (false);
+               ruler_tempo_action->set_active (false);
+               ruler_range_action->set_active (false);
+               ruler_loop_punch_action->set_active (false);
+               ruler_loop_punch_action->set_active (false);
+               ruler_bbt_action->set_active (true);
+               ruler_cd_marker_action->set_active (false);
+               ruler_timecode_action->set_active (false);
+               ruler_minsec_action->set_active (true);
+       } else {        
+               ruler_marker_action->set_active (true);
+               ruler_meter_action->set_active (true);
+               ruler_tempo_action->set_active (true);
+               ruler_range_action->set_active (true);
+               ruler_loop_punch_action->set_active (true);
+               ruler_loop_punch_action->set_active (true);
+               ruler_bbt_action->set_active (false);
+               ruler_cd_marker_action->set_active (true);
+               ruler_timecode_action->set_active (true);
+               ruler_minsec_action->set_active (false);
+       }
+
        ruler_video_action->set_active (false);
        xjadeo_proc_action->set_active (false);
        xjadeo_proc_action->set_sensitive (false);
@@ -581,18 +607,10 @@ Editor::register_actions ()
        xjadeo_osdbg_action->set_sensitive (false);
        xjadeo_fullscreen_action->set_active (false);
        xjadeo_fullscreen_action->set_sensitive (false);
-#endif
-       if (Profile->get_sae()) {
-               ruler_bbt_action->set_active (true);
-               ruler_cd_marker_action->set_active (false);
-               ruler_timecode_action->set_active (false);
-               ruler_minsec_action->set_active (true);
-       } else {
-               ruler_bbt_action->set_active (false);
-               ruler_cd_marker_action->set_active (true);
-               ruler_timecode_action->set_active (true);
-               ruler_minsec_action->set_active (false);
-       }
+       xjadeo_letterbox_action->set_active (false);
+       xjadeo_letterbox_action->set_sensitive (false);
+       xjadeo_zoom_100->set_sensitive (false);
+
        ruler_samples_action->set_active (false);
        no_ruler_shown_update = false;
 
@@ -689,7 +707,7 @@ Editor::load_bindings ()
 
        std::string binding_file;
 
-       if (find_file_in_search_path (ardour_config_search_path(), "editor.bindings", binding_file)) {
+       if (find_file (ardour_config_search_path(), "editor.bindings", binding_file)) {
                 key_bindings.load (binding_file);
                info << string_compose (_("Loaded editor bindings from %1"), binding_file) << endmsg;
         } else {
@@ -737,11 +755,9 @@ Editor::toggle_ruler_visibility (RulerType rt)
        case ruler_time_cd_marker:
                action = "toggle-cd-marker-ruler";
                break;
-#ifdef WITH_VIDEOTIMELINE
        case ruler_video_timeline:
                action = "toggle-video-ruler";
                break;
-#endif
        }
 
        Glib::RefPtr<Action> act = ActionManager::get_action (X_("Rulers"), action);
@@ -773,7 +789,15 @@ Editor::set_group_tabs ()
        }
 }
 
-#ifdef WITH_VIDEOTIMELINE
+void
+Editor::set_close_video_sensitive (bool onoff)
+{
+       Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("CloseVideo"));
+       if (act) {
+               act->set_sensitive (onoff);
+       }
+}
+
 void
 Editor::set_xjadeo_sensitive (bool onoff)
 {
@@ -800,6 +824,8 @@ Editor::toggle_xjadeo_proc (int state)
        xjadeo_frame_action->set_sensitive(onoff);
        xjadeo_osdbg_action->set_sensitive(onoff);
        xjadeo_fullscreen_action->set_sensitive(onoff);
+       xjadeo_letterbox_action->set_sensitive(onoff);
+       xjadeo_zoom_100->set_sensitive(onoff);
 }
 
 void
@@ -832,6 +858,11 @@ Editor::toggle_xjadeo_viewoption (int what, int state)
                case 5:
                        action = xjadeo_fullscreen_action;
                        break;
+               case 6:
+                       action = xjadeo_letterbox_action;
+                       break;
+               case 7:
+                       return;
                default:
                        return;
        }
@@ -869,6 +900,12 @@ Editor::set_xjadeo_viewoption (int what)
                case 5:
                        action = xjadeo_fullscreen_action;
                        break;
+               case 6:
+                       action = xjadeo_letterbox_action;
+                       break;
+               case 7:
+                       ARDOUR_UI::instance()->video_timeline->control_video_monitor(what, 0);
+                       return;
                default:
                        return;
        }
@@ -878,7 +915,6 @@ Editor::set_xjadeo_viewoption (int what)
                ARDOUR_UI::instance()->video_timeline->control_video_monitor(what, 0);
        }
 }
-#endif
 
 void
 Editor::toggle_measure_visibility ()
@@ -1123,94 +1159,94 @@ Editor::prev_snap_choice ()
 {
        switch (_snap_type) {
        case Editing::SnapToCDFrame:
-               set_snap_to (Editing::SnapToTimecodeFrame);
+               set_snap_to (Editing::SnapToRegionBoundary);
                break;
        case Editing::SnapToTimecodeFrame:
-               set_snap_to (Editing::SnapToTimecodeSeconds);
+               set_snap_to (Editing::SnapToCDFrame);
                break;
        case Editing::SnapToTimecodeSeconds:
-               set_snap_to (Editing::SnapToTimecodeMinutes);
+               set_snap_to (Editing::SnapToTimecodeFrame);
                break;
        case Editing::SnapToTimecodeMinutes:
-               set_snap_to (Editing::SnapToSeconds);
+               set_snap_to (Editing::SnapToTimecodeSeconds);
                break;
        case Editing::SnapToSeconds:
-               set_snap_to (Editing::SnapToMinutes);
+               set_snap_to (Editing::SnapToTimecodeMinutes);
                break;
        case Editing::SnapToMinutes:
-               set_snap_to (Editing::SnapToBeatDiv128);
+               set_snap_to (Editing::SnapToSeconds);
                break;
        case Editing::SnapToBeatDiv128:
-               set_snap_to (Editing::SnapToBeatDiv64);
+               set_snap_to (Editing::SnapToMinutes);
                break;
        case Editing::SnapToBeatDiv64:
-               set_snap_to (Editing::SnapToBeatDiv32);
+               set_snap_to (Editing::SnapToBeatDiv128);
                break;
        case Editing::SnapToBeatDiv32:
-               set_snap_to (Editing::SnapToBeatDiv28);
+               set_snap_to (Editing::SnapToBeatDiv64);
                break;
        case Editing::SnapToBeatDiv28:
-               set_snap_to (Editing::SnapToBeatDiv24);
+               set_snap_to (Editing::SnapToBeatDiv32);
                break;
        case Editing::SnapToBeatDiv24:
-               set_snap_to (Editing::SnapToBeatDiv20);
+               set_snap_to (Editing::SnapToBeatDiv28);
                break;
        case Editing::SnapToBeatDiv20:
-               set_snap_to (Editing::SnapToBeatDiv16);
+               set_snap_to (Editing::SnapToBeatDiv24);
                break;
        case Editing::SnapToBeatDiv16:
-               set_snap_to (Editing::SnapToBeatDiv14);
+               set_snap_to (Editing::SnapToBeatDiv20);
                break;
        case Editing::SnapToBeatDiv14:
-               set_snap_to (Editing::SnapToBeatDiv12);
+               set_snap_to (Editing::SnapToBeatDiv16);
                break;
        case Editing::SnapToBeatDiv12:
-               set_snap_to (Editing::SnapToBeatDiv10);
+               set_snap_to (Editing::SnapToBeatDiv14);
                break;
        case Editing::SnapToBeatDiv10:
-               set_snap_to (Editing::SnapToBeatDiv8);
+               set_snap_to (Editing::SnapToBeatDiv12);
                break;
        case Editing::SnapToBeatDiv8:
-               set_snap_to (Editing::SnapToBeatDiv7);
+               set_snap_to (Editing::SnapToBeatDiv10);
                break;
        case Editing::SnapToBeatDiv7:
-               set_snap_to (Editing::SnapToBeatDiv6);
+               set_snap_to (Editing::SnapToBeatDiv8);
                break;
        case Editing::SnapToBeatDiv6:
-               set_snap_to (Editing::SnapToBeatDiv5);
+               set_snap_to (Editing::SnapToBeatDiv7);
                break;
        case Editing::SnapToBeatDiv5:
-               set_snap_to (Editing::SnapToBeatDiv4);
+               set_snap_to (Editing::SnapToBeatDiv6);
                break;
        case Editing::SnapToBeatDiv4:
-               set_snap_to (Editing::SnapToBeatDiv3);
+               set_snap_to (Editing::SnapToBeatDiv5);
                break;
        case Editing::SnapToBeatDiv3:
-               set_snap_to (Editing::SnapToBeatDiv2);
+               set_snap_to (Editing::SnapToBeatDiv4);
                break;
        case Editing::SnapToBeatDiv2:
-               set_snap_to (Editing::SnapToBeat);
+               set_snap_to (Editing::SnapToBeatDiv3);
                break;
        case Editing::SnapToBeat:
-               set_snap_to (Editing::SnapToBar);
+               set_snap_to (Editing::SnapToBeatDiv2);
                break;
        case Editing::SnapToBar:
-               set_snap_to (Editing::SnapToMark);
+               set_snap_to (Editing::SnapToBeat);
                break;
        case Editing::SnapToMark:
-               set_snap_to (Editing::SnapToRegionStart);
+               set_snap_to (Editing::SnapToBar);
                break;
        case Editing::SnapToRegionStart:
-               set_snap_to (Editing::SnapToRegionEnd);
+               set_snap_to (Editing::SnapToMark);
                break;
        case Editing::SnapToRegionEnd:
-               set_snap_to (Editing::SnapToRegionSync);
+               set_snap_to (Editing::SnapToRegionStart);
                break;
        case Editing::SnapToRegionSync:
-               set_snap_to (Editing::SnapToRegionBoundary);
+               set_snap_to (Editing::SnapToRegionEnd);
                break;
        case Editing::SnapToRegionBoundary:
-               set_snap_to (Editing::SnapToCDFrame);
+               set_snap_to (Editing::SnapToRegionSync);
                break;
        }
 }
@@ -1577,17 +1613,17 @@ Editor::parameter_changed (std::string p)
        ENSURE_GUI_THREAD (*this, &Editor::parameter_changed, p)
 
        if (p == "auto-loop") {
-               update_loop_range_view (true);
+               update_loop_range_view ();
        } else if (p == "punch-in") {
-               update_punch_range_view (true);
+               update_punch_range_view ();
        } else if (p == "punch-out") {
-               update_punch_range_view (true);
+               update_punch_range_view ();
        } else if (p == "timecode-format") {
                update_just_timecode ();
        } else if (p == "show-region-fades") {
                update_region_fade_visibility ();
        } else if (p == "edit-mode") {
-               edit_mode_selector.set_active_text (edit_mode_to_string (Config->get_edit_mode()));
+               edit_mode_selector.set_text (edit_mode_to_string (Config->get_edit_mode()));
        } else if (p == "show-track-meters") {
                toggle_meter_updating();
        } else if (p == "show-summary") {
@@ -1627,7 +1663,9 @@ Editor::parameter_changed (std::string p)
        } else if (p == "timecode-offset" || p == "timecode-offset-negative") {
                update_just_timecode ();
        } else if (p == "show-zoom-tools") {
-               _zoom_tearoff->set_visible (Config->get_show_zoom_tools(), true);
+               if (_zoom_tearoff) {
+                       _zoom_tearoff->set_visible (Config->get_show_zoom_tools(), true);
+               }
        } else if (p == "sound-midi-notes") {
                Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("sound-midi-notes"));
 
@@ -1659,7 +1697,7 @@ Editor::parameter_changed (std::string p)
 void
 Editor::reset_focus ()
 {
-       track_canvas->grab_focus();
+       _track_canvas->grab_focus();
 }
 
 void
@@ -1716,9 +1754,7 @@ Editor::register_region_actions ()
        /* Toggle `locked' status of selected regions */
        toggle_reg_sens (_region_actions, "toggle-region-lock", _("Lock"), sigc::mem_fun(*this, &Editor::toggle_region_lock));
 
-#ifdef WITH_VIDEOTIMELINE
        toggle_reg_sens (_region_actions, "toggle-region-video-lock", _("Lock to Video"), sigc::mem_fun(*this, &Editor::toggle_region_video_lock));
-#endif
 
        toggle_reg_sens (
                _region_actions,
@@ -1874,6 +1910,8 @@ Editor::register_region_actions ()
        reg_sens (_region_actions, "nudge-forward", _("Nudge Later"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
        reg_sens (_region_actions, "nudge-backward", _("Nudge Earlier"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
 
+       reg_sens (_region_actions, "sequence-regions", _("Sequence Regions"), sigc::mem_fun (*this, &Editor::sequence_regions));
+
        reg_sens (
                _region_actions,
                "nudge-forward-by-capture-offset",