Browse Source

Fixed problem that could cause invalid Drag'n'Drop operations to be executed if OnDragDrop executed without a prior OnDragOver for that mouse position (e.g. very fast moving of a folder into its own subfolder)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2476 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
19c7359b57
  1. 10
      samples/SdaUser/SdaAddIns/SdaBase.addin
  2. 32
      src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
  3. 19
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs

10
samples/SdaUser/SdaAddIns/SdaBase.addin

@ -14,12 +14,12 @@ @@ -14,12 +14,12 @@
<Import assembly=":ICSharpCode.SharpDevelop">
<!-- SharpDevelop defines more conditions and doozers, we just -->
<!-- import those we need here. -->
<ConditionEvaluator name="WindowActive" class="ICSharpCode.Core.WindowActiveConditionEvaluator"/>
<ConditionEvaluator name="ActiveWindowState" class="ICSharpCode.Core.ActiveWindowStateConditionEvaluator"/>
<ConditionEvaluator name="OpenWindowState" class="ICSharpCode.Core.OpenWindowStateConditionEvaluator"/>
<ConditionEvaluator name="WindowActive" class="ICSharpCode.SharpDevelop.WindowActiveConditionEvaluator"/>
<ConditionEvaluator name="ActiveWindowState" class="ICSharpCode.SharpDevelop.ActiveWindowStateConditionEvaluator"/>
<ConditionEvaluator name="OpenWindowState" class="ICSharpCode.SharpDevelop.OpenWindowStateConditionEvaluator"/>
<Doozer name="DialogPanel" class="ICSharpCode.Core.DialogPanelDoozer"/>
<Doozer name="DisplayBinding" class="ICSharpCode.Core.DisplayBindingDoozer"/>
<Doozer name="DialogPanel" class="ICSharpCode.SharpDevelop.DialogPanelDoozer"/>
<Doozer name="DisplayBinding" class="ICSharpCode.SharpDevelop.DisplayBindingDoozer"/>
</Import>
</Runtime>

32
src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs

@ -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);
}
}
}

19
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs

@ -45,14 +45,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -45,14 +45,16 @@ namespace ICSharpCode.SharpDevelop.Project
projectBrowserControl.Dock = DockStyle.Fill;
Controls.Add(projectBrowserControl);
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
toolStrip.ShowItemToolTips = true;
toolStrip.Dock = DockStyle.Top;
toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
toolStrip.Stretch = true;
standardItems = new ToolStripItem[toolStrip.Items.Count];
toolStrip.Items.CopyTo(standardItems, 0);
Controls.Add(toolStrip);
if (AddInTree.ExistsTreeNode("/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard")) {
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
toolStrip.ShowItemToolTips = true;
toolStrip.Dock = DockStyle.Top;
toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
toolStrip.Stretch = true;
standardItems = new ToolStripItem[toolStrip.Items.Count];
toolStrip.Items.CopyTo(standardItems, 0);
Controls.Add(toolStrip);
}
projectBrowserControl.TreeView.BeforeSelect += TreeViewBeforeSelect;
}
@ -63,6 +65,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -63,6 +65,7 @@ namespace ICSharpCode.SharpDevelop.Project
void UpdateToolStrip(AbstractProjectBrowserTreeNode node)
{
if (toolStrip == null) return;
toolStrip.Items.Clear();
toolStrip.Items.AddRange(standardItems);
ToolbarService.UpdateToolbar(toolStrip);

Loading…
Cancel
Save