diff --git a/src/Editor/Ghost.Editor/View/Controls/DockLayout.cs b/src/Editor/Ghost.Editor/View/Controls/DockLayout.cs index 50456bd..8cdf3dc 100644 --- a/src/Editor/Ghost.Editor/View/Controls/DockLayout.cs +++ b/src/Editor/Ghost.Editor/View/Controls/DockLayout.cs @@ -290,10 +290,27 @@ public sealed partial class DockLayout : Control tabView.DragLeave += TabView_DragLeave; tabView.Drop += TabView_Drop; tabView.TabDragStarting += TabView_TabDragStarting; + tabView.TabDroppedOutside += TabView_TabDroppedOutside; return tabView; } + private void TabView_TabDroppedOutside(Microsoft.UI.Xaml.Controls.TabView sender, Microsoft.UI.Xaml.Controls.TabViewTabDroppedOutsideEventArgs args) + { + if (_sourceNode != null && _draggedItem != null) + { + // Remove from current tree + _sourceNode.Items.Remove(_draggedItem); + DockMutationEngine.CleanupEmptyNodes(_sourceNode, Root); + + // Create new window + var newWindow = new Ghost.Editor.View.Windows.DockWindow(_draggedItem); + newWindow.Activate(); + + ClearDragOperationState(); + } + } + private object? _draggedItem; private DockPanelNode? _sourceNode; private DockPosition _currentDropPosition = DockPosition.None; diff --git a/src/Editor/Ghost.Editor/View/Windows/DockWindow.xaml b/src/Editor/Ghost.Editor/View/Windows/DockWindow.xaml new file mode 100644 index 0000000..56323a6 --- /dev/null +++ b/src/Editor/Ghost.Editor/View/Windows/DockWindow.xaml @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/Editor/Ghost.Editor/View/Windows/DockWindow.xaml.cs b/src/Editor/Ghost.Editor/View/Windows/DockWindow.xaml.cs new file mode 100644 index 0000000..00d9fc1 --- /dev/null +++ b/src/Editor/Ghost.Editor/View/Windows/DockWindow.xaml.cs @@ -0,0 +1,22 @@ +using Ghost.Editor.Core.Controls.Internal.Docking; +using WinUIEx; + +namespace Ghost.Editor.View.Windows; + +public sealed partial class DockWindow : WindowEx +{ + public DockWindow(object initialTabContent) + { + InitializeComponent(); + + // Setup initial single panel layout + var rootGroup = new DockGroupNode(); + var panel = new DockPanelNode(); + panel.Items.Add(initialTabContent); + rootGroup.AddChild(panel); + + PART_DockLayout.Root = rootGroup; + + // Optional: Titlebar setup etc. + } +}