mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-20 13:46:30 +01:00
fix issues with copy-fixed-time drag
git-svn-id: svn://localhost/ardour2/trunk@1750 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
ee8f297989
commit
f857460dd3
2 changed files with 40 additions and 17 deletions
|
|
@ -1620,7 +1620,6 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
stop_canvas_autoscroll ();
|
stop_canvas_autoscroll ();
|
||||||
|
|
||||||
if (drag_info.item == 0) {
|
if (drag_info.item == 0) {
|
||||||
cerr << "end grab with no item\n";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3234,6 +3233,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
RouteTimeAxisView* atv;
|
RouteTimeAxisView* atv;
|
||||||
bool regionview_y_movement;
|
bool regionview_y_movement;
|
||||||
bool regionview_x_movement;
|
bool regionview_x_movement;
|
||||||
|
vector<RegionView*> copies;
|
||||||
|
|
||||||
/* first_move is set to false if the regionview has been moved in the
|
/* first_move is set to false if the regionview has been moved in the
|
||||||
motion handler.
|
motion handler.
|
||||||
|
|
@ -3241,6 +3241,12 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
|
|
||||||
if (drag_info.first_move) {
|
if (drag_info.first_move) {
|
||||||
/* just a click */
|
/* just a click */
|
||||||
|
|
||||||
|
if (drag_info.copy) {
|
||||||
|
for (list<RegionView*>::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
|
||||||
|
copies.push_back (*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3254,6 +3260,13 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
|
|
||||||
if (drag_info.brushing) {
|
if (drag_info.brushing) {
|
||||||
/* all changes were made during motion event handlers */
|
/* all changes were made during motion event handlers */
|
||||||
|
|
||||||
|
if (drag_info.copy) {
|
||||||
|
for (list<RegionView*>::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
|
||||||
|
copies.push_back (*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3332,6 +3345,12 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
|
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
|
||||||
from_playlist->remove_region ((rv->region()));
|
from_playlist->remove_region ((rv->region()));
|
||||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, 0, &from_playlist->get_state()));
|
session->add_command (new MementoCommand<Playlist>(*from_playlist, 0, &from_playlist->get_state()));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* the regionview we dragged around is a temporary copy, queue it for deletion */
|
||||||
|
|
||||||
|
copies.push_back (rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
latest_regionview = 0;
|
latest_regionview = 0;
|
||||||
|
|
@ -3346,11 +3365,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
new_selection.push_back (latest_regionview);
|
new_selection.push_back (latest_regionview);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drag_info.copy) {
|
|
||||||
// get rid of the copy
|
|
||||||
delete rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* OK, this is where it gets tricky. If the playlist was being used by >1 tracks, and the region
|
/* OK, this is where it gets tricky. If the playlist was being used by >1 tracks, and the region
|
||||||
was selected in all of them, then removing it from the playlist will have removed all
|
was selected in all of them, then removing it from the playlist will have removed all
|
||||||
trace of it from the selection (i.e. there were N regions selected, we removed 1,
|
trace of it from the selection (i.e. there were N regions selected, we removed 1,
|
||||||
|
|
@ -3363,14 +3377,21 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
here. if the region selection is not empty, then restart the loop because we know that
|
here. if the region selection is not empty, then restart the loop because we know that
|
||||||
we must have removed at least the region(view) we've just been working on as well as any
|
we must have removed at least the region(view) we've just been working on as well as any
|
||||||
that we processed on previous iterations.
|
that we processed on previous iterations.
|
||||||
|
|
||||||
|
EXCEPT .... if we are doing a copy drag, then the selection hasn't been modified and
|
||||||
|
we can just iterate.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (drag_info.copy) {
|
||||||
|
++i;
|
||||||
|
} else {
|
||||||
if (selection->regions.empty()) {
|
if (selection->regions.empty()) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
i = selection->regions.by_layer().begin();
|
i = selection->regions.by_layer().begin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
selection->set (new_selection);
|
selection->set (new_selection);
|
||||||
|
|
||||||
|
|
@ -3462,10 +3483,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
|
|
||||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, 0, &to_playlist->get_state()));
|
session->add_command (new MementoCommand<Playlist>(*to_playlist, 0, &to_playlist->get_state()));
|
||||||
|
|
||||||
/* get rid of the copy */
|
|
||||||
|
|
||||||
if (drag_info.copy) {
|
if (drag_info.copy) {
|
||||||
delete rv;
|
copies.push_back (rv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3475,6 +3494,10 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
if (!nocommit) {
|
if (!nocommit) {
|
||||||
commit_reversible_command ();
|
commit_reversible_command ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (vector<RegionView*>::iterator x = copies.begin(); x != copies.end(); ++x) {
|
||||||
|
delete *x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __ardour_svn_revision_h__
|
#ifndef __ardour_svn_revision_h__
|
||||||
#define __ardour_svn_revision_h__
|
#define __ardour_svn_revision_h__
|
||||||
static const char* ardour_svn_revision = "1744";
|
static const char* ardour_svn_revision = "1745";
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue