summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r--gtk2_ardour/editor.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index df1421b6ce..474fb4c6f9 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -2133,6 +2133,7 @@ Editor::set_snap_mode (SnapMode mode)
instant_save ();
}
+
void
Editor::set_edit_point_preference (EditPoint ep, bool force)
{
@@ -2596,25 +2597,28 @@ Editor::snap_to_with_modifier (framepos_t& start, GdkEvent const * event, RoundM
return;
}
- if (Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
+ if (ArdourKeyboard::indicates_snap (event->button.state)) {
if (_snap_mode == SnapOff) {
snap_to_internal (start, direction, for_mark);
}
} else {
if (_snap_mode != SnapOff) {
snap_to_internal (start, direction, for_mark);
+ } else if (ArdourKeyboard::indicates_snap_delta (event->button.state)) {
+ /* SnapOff, but we pressed the snap_delta modifier */
+ snap_to_internal (start, direction, for_mark);
}
}
}
void
-Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark)
+Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark, bool ensure_snap)
{
- if (!_session || _snap_mode == SnapOff) {
+ if (!_session || (_snap_mode == SnapOff && !ensure_snap)) {
return;
}
- snap_to_internal (start, direction, for_mark);
+ snap_to_internal (start, direction, for_mark, ensure_snap);
}
void
@@ -2684,7 +2688,7 @@ Editor::timecode_snap_to_internal (framepos_t& start, RoundMode direction, bool
}
void
-Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark)
+Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark, bool ensure_snap)
{
const framepos_t one_second = _session->frame_rate();
const framepos_t one_minute = _session->frame_rate() * 60;
@@ -2854,6 +2858,10 @@ Editor::snap_to_internal (framepos_t& start, RoundMode direction, bool for_mark)
case SnapMagnetic:
+ if (ensure_snap) {
+ return;
+ }
+
if (presnap > start) {
if (presnap > (start + pixel_to_sample(snap_threshold))) {
start = presnap;