when flushing notifications/signals from an ARDOUR::Playlist, emit the RegionAdded/ContentsChanged signals first so that when LayersChanged is sent, the receivers know about all the new regions

This commit is contained in:
Paul Davis 2014-10-15 18:44:17 -04:00
parent ab658d7ca1
commit 5d53335300

View file

@ -557,6 +557,7 @@ Playlist::notify_region_added (boost::shared_ptr<Region> r)
pending_contents_change = false; pending_contents_change = false;
RegionAdded (boost::weak_ptr<Region> (r)); /* EMIT SIGNAL */ RegionAdded (boost::weak_ptr<Region> (r)); /* EMIT SIGNAL */
ContentsChanged (); /* EMIT SIGNAL */ ContentsChanged (); /* EMIT SIGNAL */
} }
} }
@ -611,12 +612,12 @@ Playlist::flush_notifications (bool from_undo)
*/ */
} }
if (((regions_changed || pending_contents_change) && !in_set_state) || pending_layering) { /* notify about contents/region changes first so that layering changes
relayer (); * in a UI will take place on the new contents.
} */
if (regions_changed || pending_contents_change) { if (regions_changed || pending_contents_change) {
pending_contents_change = false; pending_layering = true;
ContentsChanged (); /* EMIT SIGNAL */ ContentsChanged (); /* EMIT SIGNAL */
} }
@ -625,6 +626,10 @@ Playlist::flush_notifications (bool from_undo)
RegionAdded (boost::weak_ptr<Region> (*s)); /* EMIT SIGNAL */ RegionAdded (boost::weak_ptr<Region> (*s)); /* EMIT SIGNAL */
} }
if ((regions_changed && !in_set_state) || pending_layering) {
relayer ();
}
coalesce_and_check_crossfades (crossfade_ranges); coalesce_and_check_crossfades (crossfade_ranges);
if (!pending_range_moves.empty ()) { if (!pending_range_moves.empty ()) {