diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 8be4709fbf..3c59bd2202 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -396,6 +396,7 @@ class Region virtual int _set_state (const XMLNode&, int version, PBD::PropertyChange& what_changed, bool send_signal); void register_properties (); + void post_set (const PBD::PropertyChange&); protected: void use_sources (SourceList const &); diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index 3dd0e1e203..c79c4e4bd2 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -153,6 +153,8 @@ MidiRegion::clone () const void MidiRegion::post_set (const PropertyChange& pc) { + Region::post_set (pc); + if (pc.contains (Properties::length) && !pc.contains (Properties::length_beats)) { update_length_beats (); } else if (pc.contains (Properties::start) && !pc.contains (Properties::start_beats)) { diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 2586a49fc4..ce6b6734af 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -1354,6 +1354,7 @@ Playlist::flush_notifications (bool from_undo) (*r)->set_position ((*r)->position() + distance); } + /* XXX: may not be necessary; Region::post_set should do this, I think */ for (RegionList::iterator r = fixup.begin(); r != fixup.end(); ++r) { (*r)->recompute_position_from_lock_style (); } diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 43a4270501..d337cf6625 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -1685,3 +1685,11 @@ Region::is_compound () const { return max_source_level() > 0; } + +void +Region::post_set (const PropertyChange& pc) +{ + if (pc.contains (Properties::position)) { + recompute_position_from_lock_style (); + } +}