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. 22
      src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
  3. 3
      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>

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

@ -374,6 +374,16 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode; ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode;
if (node != null) { if (node != null) {
HandleDragOver(e, node);
if (e.Effect != DragDropEffects.None) {
SelectedNode = node;
}
}
}
void HandleDragOver(DragEventArgs e, ExtTreeNode node)
{
DragDropEffects effect = DragDropEffects.None; DragDropEffects effect = DragDropEffects.None;
if ((e.KeyState & 8) > 0) { // CTRL key pressed. if ((e.KeyState & 8) > 0) { // CTRL key pressed.
@ -382,11 +392,6 @@ namespace ICSharpCode.SharpDevelop.Gui
effect = DragDropEffects.Move; effect = DragDropEffects.Move;
} }
e.Effect = node.GetDragDropEffect(e.Data, effect); e.Effect = node.GetDragDropEffect(e.Data, effect);
if (e.Effect != DragDropEffects.None) {
SelectedNode = node;
}
}
} }
protected override void OnDragDrop(DragEventArgs e) protected override void OnDragDrop(DragEventArgs e)
@ -396,10 +401,17 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode; ExtTreeNode node = GetNodeAt(clientcoordinate) as ExtTreeNode;
if (node != null) { if (node != null) {
// 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); node.DoDragDrop(e.Data, e.Effect);
SortParentNodes(node); SortParentNodes(node);
} }
} }
}
public int GetImageIndexForImage(string image, bool performCutBitmap) public int GetImageIndexForImage(string image, bool performCutBitmap)
{ {

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

@ -45,6 +45,7 @@ namespace ICSharpCode.SharpDevelop.Project
projectBrowserControl.Dock = DockStyle.Fill; projectBrowserControl.Dock = DockStyle.Fill;
Controls.Add(projectBrowserControl); Controls.Add(projectBrowserControl);
if (AddInTree.ExistsTreeNode("/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard")) {
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard"); toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
toolStrip.ShowItemToolTips = true; toolStrip.ShowItemToolTips = true;
toolStrip.Dock = DockStyle.Top; toolStrip.Dock = DockStyle.Top;
@ -53,6 +54,7 @@ namespace ICSharpCode.SharpDevelop.Project
standardItems = new ToolStripItem[toolStrip.Items.Count]; standardItems = new ToolStripItem[toolStrip.Items.Count];
toolStrip.Items.CopyTo(standardItems, 0); toolStrip.Items.CopyTo(standardItems, 0);
Controls.Add(toolStrip); 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