replace OS title bar with per-column 24px hats (D-057)

Hide GTK title bar via gtk_window_set_decorated(FALSE). Add
MethodChannel('clide/window') for drag/minimize/maximize/close
wired to GTK window functions. Dart WindowControls service wraps
the channel. Three per-column hats in RootLayout: left (macOS
traffic lights or plain drag), center (project > branch label),
right (minimize/maximize/close glyph buttons on Linux). Resolves
Q-006.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 08:16:28 +02:00
co-authored by Claude Opus 4.6
parent eb8c9ecf5d
commit 538472f7ec
9 changed files with 325 additions and 31 deletions
+16 -3
View File
@@ -141,7 +141,10 @@ class RootLayout extends StatelessWidget {
else if (sidebarVisible) ...[
SizedBox(
width: sidebarSize,
child: SlotHost(slot: Slots.sidebar),
child: Column(children: [
ColumnHat.left(windowControls: kernel.window),
Expanded(child: SlotHost(slot: Slots.sidebar)),
]),
),
DragResizeHandle(
arrangement: a,
@@ -149,7 +152,14 @@ class RootLayout extends StatelessWidget {
axis: Axis.horizontal,
),
],
const Expanded(child: SlotHost(slot: Slots.workspace)),
Expanded(child: Column(children: [
ColumnHat.center(
windowControls: kernel.window,
project: kernel.project.current?.path.split('/').last,
branch: null,
),
const Expanded(child: SlotHost(slot: Slots.workspace)),
])),
if (contextVisible && contextCollapsed)
ClideSpine(
label: 'context',
@@ -164,7 +174,10 @@ class RootLayout extends StatelessWidget {
),
SizedBox(
width: contextSize,
child: SlotHost(slot: Slots.contextPanel),
child: Column(children: [
ColumnHat.right(windowControls: kernel.window),
Expanded(child: SlotHost(slot: Slots.contextPanel)),
]),
),
],
],