diff --git a/Source/Editor/GUI/Tree/Tree.cs b/Source/Editor/GUI/Tree/Tree.cs
index ff99f6506..3a9780ed9 100644
--- a/Source/Editor/GUI/Tree/Tree.cs
+++ b/Source/Editor/GUI/Tree/Tree.cs
@@ -40,6 +40,11 @@ namespace FlaxEditor.GUI.Tree
private Margin _margin;
private bool _autoSize = true;
+ ///
+ /// The TreeNode that is being dragged over. This could have a value when not dragging.
+ ///
+ public TreeNode DraggedOverNode = null;
+
///
/// Action fired when tree nodes selection gets changed.
///
diff --git a/Source/Editor/GUI/Tree/TreeNode.cs b/Source/Editor/GUI/Tree/TreeNode.cs
index f2c8e2d6a..cd4fc9647 100644
--- a/Source/Editor/GUI/Tree/TreeNode.cs
+++ b/Source/Editor/GUI/Tree/TreeNode.cs
@@ -659,7 +659,7 @@ namespace FlaxEditor.GUI.Tree
Render2D.DrawText(TextFont.GetFont(), _text, textRect, _cachedTextColor, TextAlignment.Near, TextAlignment.Center);
// Draw drag and drop effect
- if (IsDragOver)
+ if (IsDragOver && _tree.DraggedOverNode == this)
{
Color dragOverColor = style.BackgroundSelected * 0.6f;
Rectangle rect;
@@ -669,10 +669,10 @@ namespace FlaxEditor.GUI.Tree
rect = textRect;
break;
case DragItemPositioning.Above:
- rect = new Rectangle(textRect.X, textRect.Y - DefaultDragInsertPositionMargin - DefaultNodeOffsetY, textRect.Width, DefaultDragInsertPositionMargin * 2.0f);
+ rect = new Rectangle(textRect.X, textRect.Top - DefaultDragInsertPositionMargin - DefaultNodeOffsetY - _margin.Top, textRect.Width, DefaultDragInsertPositionMargin * 2.0f);
break;
case DragItemPositioning.Below:
- rect = new Rectangle(textRect.X, textRect.Bottom - DefaultDragInsertPositionMargin, textRect.Width, DefaultDragInsertPositionMargin * 2.0f);
+ rect = new Rectangle(textRect.X, textRect.Bottom + _margin.Bottom - DefaultDragInsertPositionMargin, textRect.Width, DefaultDragInsertPositionMargin * 2.0f);
break;
default:
rect = Rectangle.Empty;
@@ -922,6 +922,7 @@ namespace FlaxEditor.GUI.Tree
if (result == DragDropEffect.None)
{
UpdateDrawPositioning(ref location);
+ _tree.DraggedOverNode = this;
// Check if mouse is over header
_isDragOverHeader = TestHeaderHit(ref location);
diff --git a/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs b/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs
index 6b6ea2f20..db05749b9 100644
--- a/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs
+++ b/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs
@@ -706,6 +706,8 @@ namespace FlaxEditor.SceneGraph.GUI
{
DragData data;
var tree = ParentTree;
+ if (tree.Selection.Count == 1)
+ Select();
// Check if this node is selected
if (tree.Selection.Contains(this))
@@ -715,6 +717,11 @@ namespace FlaxEditor.SceneGraph.GUI
for (var i = 0; i < tree.Selection.Count; i++)
{
var e = tree.Selection[i];
+
+ // Skip if parent is already selected to keep correct parenting
+ if (tree.Selection.Contains(e.Parent))
+ continue;
+
if (e is ActorTreeNode node && node.ActorNode.CanDrag)
actors.Add(node.ActorNode);
}