fix(dock): ensure exception-safe reentrancy guard and symmetrical event cleanup
This commit is contained in:
@@ -110,6 +110,8 @@ public sealed partial class DockLayout
|
||||
{
|
||||
if (_isSyncingSizes) return;
|
||||
|
||||
try
|
||||
{
|
||||
bool isHorizontal = groupNode.Orientation == Orientation.Horizontal;
|
||||
bool changed = false;
|
||||
|
||||
@@ -152,8 +154,8 @@ public sealed partial class DockLayout
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isSyncingSizes = false;
|
||||
}
|
||||
|
||||
@@ -42,6 +42,13 @@ internal sealed partial class EngineEditorWindow : WindowEx
|
||||
this.CenterOnScreen();
|
||||
|
||||
InitializeDockLayout();
|
||||
|
||||
this.Unloaded += OnUnloaded;
|
||||
}
|
||||
|
||||
private void OnUnloaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
PART_DockLayout.TabTornOff -= OnTabTornOff;
|
||||
}
|
||||
|
||||
private void InitializeDockLayout()
|
||||
@@ -68,7 +75,12 @@ internal sealed partial class EngineEditorWindow : WindowEx
|
||||
root.AddChild(rightGroup);
|
||||
|
||||
PART_DockLayout.Root = root;
|
||||
PART_DockLayout.TabTornOff += (s, e) => App.CreateAndShowDockWindow(e.TabContent);
|
||||
PART_DockLayout.TabTornOff += OnTabTornOff;
|
||||
}
|
||||
|
||||
private void OnTabTornOff(object? sender, TabTornOffEventArgs e)
|
||||
{
|
||||
App.CreateAndShowDockWindow(e.TabContent);
|
||||
}
|
||||
|
||||
private void MainGrid_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user