diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 00e3ab22b9..f8e2b246b1 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -178,6 +178,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD // UNDOable commands: void move_markers_command (std::list&, const std::list&); + void toggle_location_skipping_command (Marker*); XMLNode& get_state (); int set_state (const XMLNode&, int version); diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index b1a27e7ec4..1199030a94 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3689,13 +3689,8 @@ MarkerDrag::finished (GdkEvent* event, bool movement_occurred) (_editor->selection->markers.front ()->type () == Marker::Range)) { _editor->selection->markers.clear (); } - } else { - Location* loc = _marker->location (); - - if (loc && loc->is_skip()) { - loc->set_skipping (!loc->is_skipping ()); - } + _editor->toggle_location_skipping_command (_marker); break; } _editor->selection->toggle (_marker); diff --git a/gtk2_ardour/editor_undoable.cc b/gtk2_ardour/editor_undoable.cc index aebe4f246f..44b50d587f 100644 --- a/gtk2_ardour/editor_undoable.cc +++ b/gtk2_ardour/editor_undoable.cc @@ -41,7 +41,7 @@ #include "utils.h" #include "i18n.h" -void +void Editor::move_markers_command (std::list&markers, const std::list& locations) { const size_t markers_count = markers.size (); @@ -84,3 +84,23 @@ Editor::move_markers_command (std::list&markers, const std::listadd_command(new MementoCommand(*(session()->locations()), &before, &after)); commit_reversible_command (); } + +void +Editor::toggle_location_skipping_command (Marker* marker) +{ + + ARDOUR::Location* loc = marker ? marker->location () : 0; + if (!(loc && loc->is_skip ())) { + WavesMessageDialog (_("Skip State"), _("MOVE MARKERS: Invalid argument!")).run (); + return; + } + + begin_reversible_command (_("skip state")); + XMLNode &before = session()->locations()->get_state(); + + loc->set_skipping (!loc->is_skipping ()); + + XMLNode &after = session()->locations()->get_state(); + session()->add_command(new MementoCommand(*(session()->locations()), &before, &after)); + commit_reversible_command (); +}