diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index 5118aab684..dd0f313fc4 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -425,8 +425,15 @@ AudioPlaylist::check_dependents (boost::shared_ptr r, bool norefresh) /* in, out */ xfade = new Crossfade (top, bottom, xfade_length, top->first_frame(), StartOfIn); add_crossfade (*xfade); - xfade = new Crossfade (bottom, top, xfade_length, top->last_frame() - xfade_length, EndOfOut); - add_crossfade (*xfade); + + if (top_region_at (top->last_frame() - 1) == top) { + /* + only add a fade out if there is no region on top of the end of 'top' (which + would cover it). + */ + xfade = new Crossfade (bottom, top, xfade_length, top->last_frame() - xfade_length, EndOfOut); + add_crossfade (*xfade); + } } else { diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index a06fe2b5fd..e748b44824 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -404,12 +404,8 @@ Playlist::flush_notifications () timestamp_layer_op (*r); } pending_length = true; - n++; - } - - for (RegionList::iterator r = pending_bounds.begin(); r != pending_bounds.end(); ++r) { dependent_checks_needed.insert (*r); - /* don't increment n again - its the same list */ + n++; } for (s = pending_adds.begin(); s != pending_adds.end(); ++s) { @@ -417,10 +413,6 @@ Playlist::flush_notifications () n++; } - for (s = dependent_checks_needed.begin(); s != dependent_checks_needed.end(); ++s) { - check_dependents (*s, false); - } - for (s = pending_removes.begin(); s != pending_removes.end(); ++s) { remove_dependents (*s); n++; @@ -441,6 +433,10 @@ Playlist::flush_notifications () Modified (); /* EMIT SIGNAL */ } + for (s = dependent_checks_needed.begin(); s != dependent_checks_needed.end(); ++s) { + check_dependents (*s, false); + } + pending_adds.clear (); pending_removes.clear (); pending_bounds.clear (); @@ -1111,7 +1107,6 @@ Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr } if (what_changed & Change (ARDOUR::PositionChanged|ARDOUR::LengthChanged)) { - if (holding_state ()) { pending_bounds.push_back (region); } else { @@ -1121,9 +1116,9 @@ Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr } possibly_splice (); - check_dependents (region, false); notify_length_changed (); relayer (); + check_dependents (region, false); } } }