diff options
Diffstat (limited to 'gtk2_ardour/editor_drag.cc')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index c1a8553d62..726a279a7e 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -593,6 +593,7 @@ RegionDrag::find_time_axis_view (TimeAxisView* t) const RegionMotionDrag::RegionMotionDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<RegionView*> const & v, bool b) : RegionDrag (e, i, p, v) , _brushing (b) + , _ignore_video_lock (false) , _total_x_delta (0) , _last_pointer_time_axis_view (0) , _last_pointer_layer (0) @@ -618,6 +619,10 @@ RegionMotionDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) _last_pointer_layer = tv.first->layer_display() == Overlaid ? 0 : tv.second; } + if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask (Keyboard::TertiaryModifier))) { + _ignore_video_lock = true; + } + if (_brushing) { /* cross track dragging seems broken here. disabled for now. */ _y_constrained = true; @@ -1008,7 +1013,7 @@ RegionMotionDrag::motion (GdkEvent* event, bool first_move) y_delta = 0; - if (rv->region()->locked() || rv->region()->video_locked()) { + if (rv->region()->locked() || (rv->region()->video_locked() && !_ignore_video_lock)) { continue; } @@ -1430,7 +1435,7 @@ RegionMoveDrag::finished_copy (bool const changed_position, bool const /*changed RouteTimeAxisView* dest_rtv = 0; - if (i->view->region()->locked() || i->view->region()->video_locked()) { + if (i->view->region()->locked() || (i->view->region()->video_locked() && !_ignore_video_lock)) { continue; } @@ -1513,7 +1518,7 @@ RegionMoveDrag::finished_no_copy ( RegionView* rv = i->view; RouteTimeAxisView* dest_rtv = 0; - if (rv->region()->locked() || rv->region()->video_locked()) { + if (rv->region()->locked() || (rv->region()->video_locked() && !_ignore_video_lock)) { ++i; continue; } |