diff --git a/Source/Editor/GUI/Tree/Tree.cs b/Source/Editor/GUI/Tree/Tree.cs
index e36f0ccd5..8df26c211 100644
--- a/Source/Editor/GUI/Tree/Tree.cs
+++ b/Source/Editor/GUI/Tree/Tree.cs
@@ -73,6 +73,11 @@ namespace FlaxEditor.GUI.Tree
///
public bool DrawRootTreeLine = true;
+ ///
+ /// Occurs when the deferred layout operation was performed.
+ ///
+ public event Action AfterDeferredLayout;
+
///
/// Gets or sets the margin for the child tree nodes.
///
@@ -375,6 +380,7 @@ namespace FlaxEditor.GUI.Tree
if (_deferLayoutUpdate)
{
base.PerformLayout();
+ AfterDeferredLayout?.Invoke();
_deferLayoutUpdate = false;
}
diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs
index 705976e6e..3c7583b0e 100644
--- a/Source/Editor/Windows/SceneTreeWindow.cs
+++ b/Source/Editor/Windows/SceneTreeWindow.cs
@@ -34,6 +34,7 @@ namespace FlaxEditor.Windows
private DragScriptItems _dragScriptItems;
private DragHandlers _dragHandlers;
private bool _isDropping = false;
+ private bool _forceScrollNodeToView = false;
///
/// Scene tree panel.
@@ -91,6 +92,15 @@ namespace FlaxEditor.Windows
_tree.SelectedChanged += Tree_OnSelectedChanged;
_tree.RightClick += OnTreeRightClick;
_tree.Parent = _sceneTreePanel;
+ _tree.AfterDeferredLayout += () =>
+ {
+ if (_forceScrollNodeToView)
+ {
+ _forceScrollNodeToView = false;
+ ScrollToSelectedNode();
+ }
+ };
+
headerPanel.Parent = this;
// Setup input actions
@@ -142,6 +152,16 @@ namespace FlaxEditor.Windows
root.TreeNode.UpdateFilter(query);
_tree.UnlockChildrenRecursive();
+
+ // When keep the selected nodes in a view
+ var nodeSelection = _tree.Selection;
+ if (nodeSelection.Count != 0)
+ {
+ var node = nodeSelection[nodeSelection.Count - 1];
+ node.Expand(true);
+ _forceScrollNodeToView = true;
+ }
+
PerformLayout();
PerformLayout();
}