Fix undo of layer-changing region drags

Move clear_changes() of the playlist on which a region has been dragged
before calling set_layer() on that playlist, so that undo of region drags
in layered mode undoes any layer changes too.

Should fix #5904
This commit is contained in:
Colin Fletcher 2014-04-14 13:34:18 +01:00
parent 56af57d682
commit 9a35f73b9e

View File

@ -1077,6 +1077,17 @@ RegionMoveDrag::finished_no_copy (
} else {
boost::shared_ptr<Playlist> playlist = dest_rtv->playlist();
/* this movement may result in a crossfade being modified, or a layering change,
so we need to get undo data from the playlist as well as the region.
*/
pair<PlaylistSet::iterator, bool> r = modified_playlists.insert (playlist);
if (r.second) {
playlist->clear_changes ();
}
rv->region()->clear_changes ();
/*
@ -1090,30 +1101,18 @@ RegionMoveDrag::finished_no_copy (
rv->drag_end ();
/* just change the model */
boost::shared_ptr<Playlist> playlist = dest_rtv->playlist();
if (dest_rtv->view()->layer_display() == Stacked || dest_rtv->view()->layer_display() == Expanded) {
playlist->set_layer (rv->region(), dest_layer);
}
/* freeze playlist to avoid lots of relayering in the case of a multi-region drag */
pair<PlaylistSet::iterator, bool> r = frozen_playlists.insert (playlist);
r = frozen_playlists.insert (playlist);
if (r.second) {
playlist->freeze ();
}
/* this movement may result in a crossfade being modified, so we need to get undo
data from the playlist as well as the region.
*/
r = modified_playlists.insert (playlist);
if (r.second) {
playlist->clear_changes ();
}
rv->region()->set_position (where);
_editor->session()->add_command (new StatefulDiffCommand (rv->region()));