summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midi_region.h1
-rw-r--r--libs/ardour/midi_region.cc17
2 files changed, 14 insertions, 4 deletions
diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h
index 9de79a9513..21d6c13ade 100644
--- a/libs/ardour/ardour/midi_region.h
+++ b/libs/ardour/ardour/midi_region.h
@@ -102,6 +102,7 @@ class LIBARDOUR_API MidiRegion : public Region
void fix_negative_start ();
Evoral::Beats start_beats () {return _start_beats.val(); }
+ Evoral::Beats length_beats () {return _length_beats.val(); }
protected:
virtual bool can_trim_start_before_source_start () const {
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc
index 035c17c9de..ce473c162d 100644
--- a/libs/ardour/midi_region.cc
+++ b/libs/ardour/midi_region.cc
@@ -197,16 +197,25 @@ MidiRegion::set_length_internal (framecnt_t len, const int32_t& sub_num)
void
MidiRegion::update_after_tempo_map_change (bool /* send */)
{
+ const framepos_t old_pos = _position;
+ const framepos_t old_length = _length;
+ const framepos_t old_start = _start;
+
Region::update_after_tempo_map_change (false);
/* _start has now been updated. */
_length = _session.tempo_map().frame_at_beat (beat() + _length_beats.val().to_double()) - _position;
PropertyChange s_and_l;
- s_and_l.add (Properties::start);
- s_and_l.add (Properties::length);
- s_and_l.add (Properties::length_beats);
- s_and_l.add (Properties::position);
+ if (old_start != _start) {
+ s_and_l.add (Properties::start);
+ }
+ if (old_length != _length) {
+ s_and_l.add (Properties::length);
+ }
+ if (old_pos != _position) {
+ s_and_l.add (Properties::position);
+ }
send_change (s_and_l);
}