From 303087c4c4b223b1b933dec815fa7c40b0cf478c Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 12 Aug 2025 23:18:18 +0200 Subject: [PATCH] Fix regression in renaming textbox placement of newly added actor to prefab --- Source/Editor/GUI/Popups/RenamePopup.cs | 4 ++++ Source/Editor/GUI/Tree/Tree.cs | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Source/Editor/GUI/Popups/RenamePopup.cs b/Source/Editor/GUI/Popups/RenamePopup.cs index 353830a21..d17a4180d 100644 --- a/Source/Editor/GUI/Popups/RenamePopup.cs +++ b/Source/Editor/GUI/Popups/RenamePopup.cs @@ -130,6 +130,10 @@ namespace FlaxEditor.GUI /// Created popup. public static RenamePopup Show(Control control, Rectangle area, string value, bool isMultiline) { + // hardcoded flushing layout for tree controls + if (control is Tree.TreeNode treeNode && treeNode.ParentTree != null) + treeNode.ParentTree.FlushPendingPerformLayout(); + // Calculate the control size in the window space to handle scaled controls var upperLeft = control.PointToWindow(area.UpperLeft); var bottomRight = control.PointToWindow(area.BottomRight); diff --git a/Source/Editor/GUI/Tree/Tree.cs b/Source/Editor/GUI/Tree/Tree.cs index 8df26c211..facc2c36d 100644 --- a/Source/Editor/GUI/Tree/Tree.cs +++ b/Source/Editor/GUI/Tree/Tree.cs @@ -364,6 +364,19 @@ namespace FlaxEditor.GUI.Tree BulkSelectUpdateExpanded(false); } + /// + /// Flushes any pending layout perming action that has been delayed until next update to optimize performance of the complex tree hierarchy. + /// + public void FlushPendingPerformLayout() + { + if (_deferLayoutUpdate) + { + base.PerformLayout(); + AfterDeferredLayout?.Invoke(); + _deferLayoutUpdate = false; + } + } + /// public override void PerformLayout(bool force = false) { @@ -378,11 +391,7 @@ namespace FlaxEditor.GUI.Tree public override void Update(float deltaTime) { if (_deferLayoutUpdate) - { - base.PerformLayout(); - AfterDeferredLayout?.Invoke(); - _deferLayoutUpdate = false; - } + FlushPendingPerformLayout(); var node = SelectedNode;