diff options
author | nick_m <mainsbridge@gmail.com> | 2015-11-14 03:05:53 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2015-11-14 03:05:53 +1100 |
commit | 6210b63a136287388176ee947409fedbd67343db (patch) | |
tree | a0ea0fe1535339df1d788032f2929c7b03a65bf7 /libs/ardour/region.cc | |
parent | 4b25c80cb9547e1ce87e556db735d33315ab5045 (diff) |
Ardour::Region - add method required to fix #6673.
Diffstat (limited to 'libs/ardour/region.cc')
-rw-r--r-- | libs/ardour/region.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 516adb6ee5..bd99403cb7 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -591,6 +591,44 @@ Region::set_position (framepos_t pos) } +/** A gui may need to create a region, then place it in an initial + * position determined by the user. + * When this takes place within one gui operation, we have to reset + * _last_position to prevent an implied move. + */ +void +Region::set_initial_position (framepos_t pos) +{ + if (!can_move()) { + return; + } + + if (_position != pos) { + _position = pos; + + /* check that the new _position wouldn't make the current + length impossible - if so, change the length. + + XXX is this the right thing to do? + */ + + if (max_framepos - _length < _position) { + _last_length = _length; + _length = max_framepos - _position; + } + + recompute_position_from_lock_style (); + /* ensure that this move doesn't cause a range move */ + _last_position = _position; + } + + + /* do this even if the position is the same. this helps out + a GUI that has moved its representation already. + */ + send_change (Properties::position); +} + void Region::set_position_internal (framepos_t pos, bool allow_bbt_recompute) { |