mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-13 18:16:35 +01:00
Fix #8012 to some extent.
As soon as we ripple drag the selected region out of the original track, ::remove_unselected_from_views() is called and the rippled regions on the original track are not covered when ::remove_selected_from_views() is called again in ::finished(). Therefore we need to shift the regions remaining on the original track back and forth again, in order to have them properly in the undo history.
This commit is contained in:
parent
07709b39c1
commit
d2f5edf64f
2 changed files with 25 additions and 1 deletions
|
|
@ -2314,6 +2314,9 @@ RegionRippleDrag::RegionRippleDrag (Editor* e, ArdourCanvas::Item* i, RegionView
|
|||
|
||||
if (allow_moves_across_tracks) {
|
||||
orig_tav = &(*selected_regions.begin())->get_time_axis_view();
|
||||
for (std::list<DraggingView>::const_iterator it = _views.begin(); it != _views.end(); ++it) {
|
||||
_orig_tav_ripples.push_back((*it).view->region());
|
||||
}
|
||||
} else {
|
||||
orig_tav = NULL;
|
||||
}
|
||||
|
|
@ -2423,6 +2426,26 @@ RegionRippleDrag::finished (GdkEvent* event, bool movement_occurred)
|
|||
orig_tav->playlist()->clear_changes();
|
||||
orig_tav->playlist()->clear_owned_changes();
|
||||
remove_unselected_from_views (prev_amount, true);
|
||||
|
||||
std::list<boost::shared_ptr<Region> >::const_iterator it = _orig_tav_ripples.begin();
|
||||
for (; it != _orig_tav_ripples.end(); ++it) {
|
||||
const boost::shared_ptr<Region> r = *it;
|
||||
bool found = false;
|
||||
for (std::list<DraggingView>::const_iterator it = _views.begin(); it != _views.end(); ++it) {
|
||||
if (it->view->region() == r) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
const samplecnt_t pos_after = r->position();
|
||||
const samplecnt_t pos_before = pos_after + selection_length;
|
||||
r->set_position(pos_before);
|
||||
r->clear_changes();
|
||||
r->set_position(pos_after);
|
||||
}
|
||||
}
|
||||
|
||||
vector<Command*> cmds;
|
||||
orig_tav->playlist()->rdiff (cmds);
|
||||
_editor->session()->add_commands (cmds);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue