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

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

@ -374,14 +374,7 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode; ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode;
if (node != null) { if (node != null) {
DragDropEffects effect = DragDropEffects.None; HandleDragOver(e, node);
if ((e.KeyState & 8) > 0) { // CTRL key pressed.
effect = DragDropEffects.Copy;
} else {
effect = DragDropEffects.Move;
}
e.Effect = node.GetDragDropEffect(e.Data, effect);
if (e.Effect != DragDropEffects.None) { if (e.Effect != DragDropEffects.None) {
SelectedNode = node; SelectedNode = node;
@ -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) protected override void OnDragDrop(DragEventArgs e)
{ {
base.OnDragDrop(e); base.OnDragDrop(e);
@ -396,8 +401,15 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode; ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode;
if (node != null) { if (node != null) {
node.DoDragDrop(e.Data, e.Effect); // when dragging very fast from one node to another, it's possible that
SortParentNodes(node); // 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
projectBrowserControl.Dock = DockStyle.Fill; projectBrowserControl.Dock = DockStyle.Fill;
Controls.Add(projectBrowserControl); Controls.Add(projectBrowserControl);
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard"); if (AddInTree.ExistsTreeNode("/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard")) {
toolStrip.ShowItemToolTips = true; toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
toolStrip.Dock = DockStyle.Top; toolStrip.ShowItemToolTips = true;
toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; toolStrip.Dock = DockStyle.Top;
toolStrip.Stretch = true; toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
standardItems = new ToolStripItem[toolStrip.Items.Count]; toolStrip.Stretch = true;
toolStrip.Items.CopyTo(standardItems, 0); standardItems = new ToolStripItem[toolStrip.Items.Count];
Controls.Add(toolStrip); toolStrip.Items.CopyTo(standardItems, 0);
Controls.Add(toolStrip);
}
projectBrowserControl.TreeView.BeforeSelect += TreeViewBeforeSelect; projectBrowserControl.TreeView.BeforeSelect += TreeViewBeforeSelect;
} }
@ -63,6 +65,7 @@ namespace ICSharpCode.SharpDevelop.Project
void UpdateToolStrip(AbstractProjectBrowserTreeNode node) void UpdateToolStrip(AbstractProjectBrowserTreeNode node)
{ {
if (toolStrip == null) return;
toolStrip.Items.Clear(); toolStrip.Items.Clear();
toolStrip.Items.AddRange(standardItems); toolStrip.Items.AddRange(standardItems);
ToolbarService.UpdateToolbar(toolStrip); ToolbarService.UpdateToolbar(toolStrip);

Loading…
Cancel
Save