Logo SVGs made square (160x160). New onbackground variant has the
clide logo on a #20202C filled circle. Rendered at 1024px and
downsampled to 256/128/48 for crisp taskbar icons. Native runner
loads clide-taskbar-256.png instead of the bare logo.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The relative path failed because flutter run's cwd differs from
the bundle directory. Now reads /proc/self/exe to find the binary
location and builds the icon path from there.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Flutter's globalPosition is window-relative, not screen-absolute.
Now using gdk_device_get_position() on the native side to get
the actual screen coordinates at the moment startDrag/startResize
is called. Dart no longer passes coordinates — the native handler
queries the pointer directly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The xdg-decoration protocol files caused a linker error
(xdg_toplevel_interface undefined) since we switched to the KDE
server-decoration protocol. Removed. Added make build-check
target that runs flutter build linux to catch native compilation
failures that flutter test misses.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace xdg-decoration (needs xdg_toplevel, GTK3 doesn't expose it)
with org_kde_kwin_server_decoration (works with wl_surface which
GDK provides). On KDE Wayland: binds the manager from the registry,
creates a per-surface decoration object, requests mode=None (0).
Falls back gracefully on GNOME (protocol not present, GTK's
set_decorated(FALSE) already works). X11 fallback via
gdk_window_set_decorations(0) unchanged.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace XWayland fallback with proper xdg-decoration protocol
negotiation. On Wayland: binds zxdg_decoration_manager_v1 from
the compositor registry, requests CLIENT_SIDE mode on the toplevel
surface — KWin respects this and drops server-side decorations.
Falls back to gdk_window_set_decorations(0) + set_decorated(FALSE)
on X11. GDK_BACKEND=x11 removed from Makefile.
Also fixes mouse-jumping glitch: startDrag and startResize now
pass screen coordinates from Flutter's globalPosition through the
method channel to gtk_window_begin_move/resize_drag.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Without OS decorations there are no resize handles. Added 6px
edge and 12px corner invisible hit zones around the window
perimeter via ClideResizeBorder. Each zone changes the cursor
and calls gtk_window_begin_resize_drag via the clide/window
method channel with a GdkWindowEdge direction.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
gtk_window_set_decorated alone doesn't work on KDE Wayland — KWin
adds server-side decorations regardless. Now also calling
gdk_window_set_decorations(gdk_win, 0) after realize and before
first frame show, which communicates directly with the compositor
via GDK's Wayland layer.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hat bar is now a single continuous row above the three columns
instead of per-column segments. Left: macOS traffic lights or
empty. Center: project > branch. Right: minimize/maximize/close
on Linux or empty. Column separators keep 4px hit area but show
a 1px centered line.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
Single Flutter package at the repo root. All code, tests, assets,
and platform directories moved from app/ to root. Package renamed
from clide_app to clide — all imports rewritten. Merged pubspec
combines core (ffi) and app (flutter, yaml, xterm) dependencies.
Makefile simplified: no APP_PRESENT conditionals, no cd, no daemon
lifecycle. 317 tests pass.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>