diff --git a/samples/SdaUser/SdaAddIns/SdaBase.addin b/samples/SdaUser/SdaAddIns/SdaBase.addin index 66291b2c40..daf35919d8 100644 --- a/samples/SdaUser/SdaAddIns/SdaBase.addin +++ b/samples/SdaUser/SdaAddIns/SdaBase.addin @@ -14,12 +14,12 @@ - - - + + + - - + + diff --git a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs index 5dbf356462..3dad04c927 100644 --- a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs +++ b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs @@ -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 } } + 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 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); + } } } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs index 4365e38f9a..3060087094 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs @@ -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 void UpdateToolStrip(AbstractProjectBrowserTreeNode node) { + if (toolStrip == null) return; toolStrip.Items.Clear(); toolStrip.Items.AddRange(standardItems); ToolbarService.UpdateToolbar(toolStrip);