- if( !last_plugin || drop_position > last_plugin->startproject+last_plugin->length ) {
- return drop_position;
- }
-
- int64_t drop_x0 = 0, drop_x1 = 0; // drop zone boundries
- for( Plugin *plugin = (Plugin *)plugin_set->first; plugin; ) {
- int64_t plugin_x0 = plugin->startproject, plugin_x1 = plugin_x0 + plugin->length;
+ if( !last_plugin ) return drop_position;
+ double plugin_set_end = last_plugin->track->from_units(last_plugin->startproject+last_plugin->length);
+ if( position >= plugin_set_end ) return drop_position;
+ double moved_plugin_start = moved_plugin->track->from_units(moved_plugin->startproject);
+ position -= mwindow->session->drag_position - moved_plugin_start;
+ int64_t plugin_position = track->to_units(position, 1);
+
+ int64_t drop_start = 0, drop_end = 0; // drop zone boundries
+ Plugin *next_plugin = (Plugin *)plugin_set->first;
+ while( next_plugin ) {
+ Plugin *plugin = next_plugin; next_plugin = (Plugin *)plugin->next;
+ int64_t plugin_start = plugin->startproject;
+ int64_t plugin_end = plugin_start + plugin->length;
+ double plugin_end_pos = plugin->track->from_units(plugin_end);
+ int64_t track_plugin_end = track->to_units(plugin_end_pos, 0);