@ -374,14 +374,7 @@ namespace ICSharpCode.SharpDevelop.Gui
@@ -374,14 +374,7 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = GetNodeAt ( clientcoordinate ) as ExtTreeNode ;
if ( node ! = null ) {
DragDropEffects effect = DragDropEffects . None ;
if ( ( e . KeyState & 8 ) > 0 ) { // CTRL key pressed.
effect = DragDropEffects . Copy ;
} else {
effect = DragDropEffects . Move ;
}
e . Effect = node . GetDragDropEffect ( e . Data , effect ) ;
HandleDragOver ( e , node ) ;
if ( e . Effect ! = DragDropEffects . None ) {
SelectedNode = node ;
@ -389,6 +382,18 @@ namespace ICSharpCode.SharpDevelop.Gui
@@ -389,6 +382,18 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
void HandleDragOver ( DragEventArgs e , ExtTreeNode node )
{
DragDropEffects effect = DragDropEffects . None ;
if ( ( e . KeyState & 8 ) > 0 ) { // CTRL key pressed.
effect = DragDropEffects . Copy ;
} else {
effect = DragDropEffects . Move ;
}
e . Effect = node . GetDragDropEffect ( e . Data , effect ) ;
}
protected override void OnDragDrop ( DragEventArgs e )
{
base . OnDragDrop ( e ) ;
@ -396,8 +401,15 @@ namespace ICSharpCode.SharpDevelop.Gui
@@ -396,8 +401,15 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = GetNodeAt ( clientcoordinate ) as ExtTreeNode ;
if ( node ! = null ) {
node . DoDragDrop ( e . Data , e . Effect ) ;
SortParentNodes ( node ) ;
// when dragging very fast from one node to another, it's possible that
// OnDragDrop raises without OnDragOver for the node.
// So we have to call HandleDragOver to ensure that we don't call DoDragDrop for
// invalid operations.
HandleDragOver ( e , node ) ;
if ( e . Effect ! = DragDropEffects . None ) {
node . DoDragDrop ( e . Data , e . Effect ) ;
SortParentNodes ( node ) ;
}
}
}