From 616f7f40b6db150c18aa29f132bf13d1db8c5e49 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 22 Dec 2018 01:09:24 +0100 Subject: Properly remove-time automation Previously "remove time" was able to produce overlapping, not ordered automation. --- libs/evoral/src/ControlList.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libs') diff --git a/libs/evoral/src/ControlList.cpp b/libs/evoral/src/ControlList.cpp index 8d0ac688e9..e1729483cc 100644 --- a/libs/evoral/src/ControlList.cpp +++ b/libs/evoral/src/ControlList.cpp @@ -990,6 +990,14 @@ ControlList::shift (double pos, double frames) { { Glib::Threads::RWLock::WriterLock lm (_lock); + if (frames < 0) { + /* Route::shift () with negative shift is used + * for "remove time". The time [pos.. pos-frames] is removed. + * and everyhing after, moved backwards. + * TODO: consider adding guard-points (need special-casing) + */ + erase_range_internal (pos, pos - frames, _events); + } for (iterator i = _events.begin(); i != _events.end(); ++i) { if ((*i)->when >= pos) { -- cgit v1.2.3