summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_mouse.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-02-11 17:20:46 +0000
committerCarl Hetherington <carl@carlh.net>2009-02-11 17:20:46 +0000
commit41afd1201dfd1d2a2df8a5eeed74aa4d3aaca9bc (patch)
treebc09adf8502db50aed547ab9259423fdb0dffa56 /gtk2_ardour/editor_mouse.cc
parent947077c12e13a11d6a39b931bd21f288883568cd (diff)
Fix some problems with dragging more than 1 region to a new track.
git-svn-id: svn://localhost/ardour2/branches/3.0@4530 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_mouse.cc')
-rw-r--r--gtk2_ardour/editor_mouse.cc21
1 files changed, 14 insertions, 7 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 2a47b7d74d..157bda3f79 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -4235,6 +4235,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
nframes64_t drag_delta;
bool changed_tracks, changed_position;
std::pair<TimeAxisView*, int> tvp;
+ std::map<RegionView*, RouteTimeAxisView*> final;
/* first_move is set to false if the regionview has been moved in the
motion handler.
@@ -4297,16 +4298,22 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
track_canvas->update_now ();
- for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
-
- RegionView* rv = (*i);
+ /* make a list of where each region ended up */
+ for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
+
double ix1, ix2, iy1, iy2;
- rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
- rv->get_canvas_frame()->i2w (ix1, iy1);
+ (*i)->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
+ (*i)->get_canvas_frame()->i2w (ix1, iy1);
iy1 += vertical_adjustment.get_value() - canvas_timebars_vsize;
- std::pair<TimeAxisView*, int> const dest_tv = trackview_by_y_position (iy1);
- RouteTimeAxisView* dest_rtv = dynamic_cast<RouteTimeAxisView*> (dest_tv.first);
+ std::pair<TimeAxisView*, int> tv = trackview_by_y_position (iy1);
+ final[*i] = dynamic_cast<RouteTimeAxisView*> (tv.first);
+ }
+
+ for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
+
+ RegionView* rv = (*i);
+ RouteTimeAxisView* dest_rtv = final[*i];
nframes64_t where;