mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 03:36:32 +01:00
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:
parent
ab658d7ca1
commit
5d53335300
1 changed files with 32 additions and 27 deletions
|
|
@ -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,37 +612,41 @@ 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
|
||||||
|
* in a UI will take place on the new contents.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (regions_changed || pending_contents_change) {
|
||||||
|
pending_layering = true;
|
||||||
|
ContentsChanged (); /* EMIT SIGNAL */
|
||||||
|
}
|
||||||
|
|
||||||
|
for (s = pending_adds.begin(); s != pending_adds.end(); ++s) {
|
||||||
|
(*s)->clear_changes ();
|
||||||
|
RegionAdded (boost::weak_ptr<Region> (*s)); /* EMIT SIGNAL */
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((regions_changed && !in_set_state) || pending_layering) {
|
||||||
relayer ();
|
relayer ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
coalesce_and_check_crossfades (crossfade_ranges);
|
||||||
|
|
||||||
|
if (!pending_range_moves.empty ()) {
|
||||||
|
/* We don't need to check crossfades for these as pending_bounds has
|
||||||
|
already covered it.
|
||||||
|
*/
|
||||||
|
RangesMoved (pending_range_moves, from_undo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pending_region_extensions.empty ()) {
|
||||||
|
RegionsExtended (pending_region_extensions);
|
||||||
|
}
|
||||||
|
|
||||||
if (regions_changed || pending_contents_change) {
|
clear_pending ();
|
||||||
pending_contents_change = false;
|
|
||||||
ContentsChanged (); /* EMIT SIGNAL */
|
|
||||||
}
|
|
||||||
|
|
||||||
for (s = pending_adds.begin(); s != pending_adds.end(); ++s) {
|
in_flush = false;
|
||||||
(*s)->clear_changes ();
|
}
|
||||||
RegionAdded (boost::weak_ptr<Region> (*s)); /* EMIT SIGNAL */
|
|
||||||
}
|
|
||||||
|
|
||||||
coalesce_and_check_crossfades (crossfade_ranges);
|
|
||||||
|
|
||||||
if (!pending_range_moves.empty ()) {
|
|
||||||
/* We don't need to check crossfades for these as pending_bounds has
|
|
||||||
already covered it.
|
|
||||||
*/
|
|
||||||
RangesMoved (pending_range_moves, from_undo);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pending_region_extensions.empty ()) {
|
|
||||||
RegionsExtended (pending_region_extensions);
|
|
||||||
}
|
|
||||||
|
|
||||||
clear_pending ();
|
|
||||||
|
|
||||||
in_flush = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Playlist::clear_pending ()
|
Playlist::clear_pending ()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue