From 89b0817f83adc391ee8309af5ac796110d041eed Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 20 Aug 2015 02:24:27 +0200 Subject: fix "locked" + "locked to video" bug. previously if some audio region was locked and locked to video, the audio-region always stayed put and the video could only be moved forward. TODO: add an "unlock all" option. --- gtk2_ardour/editor_drag.cc | 15 +++++++++++++++ gtk2_ardour/editor_drag.h | 1 + 2 files changed, 16 insertions(+) diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 84fb2d557c..9455e028c6 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -2502,11 +2502,15 @@ VideoTimeLineDrag::VideoTimeLineDrag (Editor* e, ArdourCanvas::Item* i) _editor->get_regions_after(rs, (framepos_t) 0, empty); std::list views = rs.by_layer(); + _stuck = false; for (list::iterator i = views.begin(); i != views.end(); ++i) { RegionView* rv = (*i); if (!rv->region()->video_locked()) { continue; } + if (!rv->region()->position_locked()) { + _stuck = true; + } _views.push_back (AVDraggingView (rv)); } } @@ -2518,6 +2522,10 @@ VideoTimeLineDrag::start_grab (GdkEvent* event, Gdk::Cursor*) if (_editor->session() == 0) { return; } + if (_stuck) { + show_verbose_cursor_text (_("One or more Audio Regions\nare both Locked and\nLocked to Video.\nThe video cannot me moved.")); + return; + } _startdrag_video_offset=ARDOUR_UI::instance()->video_timeline->get_offset(); _max_backwards_drag = ( @@ -2549,6 +2557,10 @@ VideoTimeLineDrag::motion (GdkEvent* event, bool first_move) if (ARDOUR_UI::instance()->video_timeline->is_offset_locked()) { return; } + if (_stuck) { + show_verbose_cursor_text (_("One or more Audio Regions\nare both Locked and\nLocked to Video.\nThe video cannot me moved.")); + return; + } framecnt_t dt = adjusted_current_frame (event) - raw_grab_frame() + _pointer_frame_offset; dt = ARDOUR_UI::instance()->video_timeline->quantify_frames_to_apv(_startdrag_video_offset+dt) - _startdrag_video_offset; @@ -2595,6 +2607,9 @@ VideoTimeLineDrag::finished (GdkEvent * /*event*/, bool movement_occurred) if (ARDOUR_UI::instance()->video_timeline->is_offset_locked()) { return; } + if (_stuck) { + return; + } if (!movement_occurred || ! _editor->session()) { return; diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index b9310c79fb..71527d4a4c 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -645,6 +645,7 @@ protected: private: ARDOUR::frameoffset_t _startdrag_video_offset; ARDOUR::frameoffset_t _max_backwards_drag; + bool _stuck; }; /** Drag to trim region(s) */ -- cgit v1.2.3