Skip to content

feat(native): make the topbar the window's title bar - #840

Merged
omartelo merged 1 commit into
mainfrom
feat/native-merged-titlebar
Oct 19, 2026
Merged

omartelo merged 1 commit into
mainfrom
feat/native-merged-titlebar

Conversation

@omartelo

Copy link
Copy Markdown
Collaborator

The native window opened under the system's title bar, a second strip over the topbar (on GNOME, Gio's own light bar, blind to the theme). The topbar is now the title bar. Mockup: https://claude.ai/artifact/1TNrcGD7UVntLeL5CN4kNP

  • The window opens with Decorated(false). The empty run of the topbar after the tabs moves the window; a double click maximizes or restores.
  • Minimize, maximize and close sit right of Settings, drawn in each desktop's look: Windows 11's 46dp corner buttons, GNOME's round buttons on the side and in the order of button-layout (read from the settings portal), Breeze's glyphs when XDG_CURRENT_DESKTOP is KDE.
  • macOS keeps its own traffic lights; the topbar leaves them 78dp at the left and the lich mark follows them.
  • A desktop that decorates its windows itself keeps its bar and lich draws no buttons: a Wayland compositor answering server-side to the client-side request, or an X11 tiling WM (by _NET_WM_NAME).
  • Gio fork bumped to lichdotdev/gio c0397443 (branch drop-event): Wayland asks xdg-decoration for the mode the app wants; X11 sets _MOTIF_WM_HINTS, moves and resizes through _NET_WM_MOVERESIZE and keeps the WM's decoration under a tiling WM; both turn a double click on a move area into maximize.
  • Tooltips in all seven locales; docs/ceilings.md names what is out (Snap Layouts, KDE decoration themes, X11 corners and shadow, macOS light position and double click).

Verification

  • native/: gofmt, go vet ./..., go test ./... clean; fork: new caption tests pass.
  • Rig: KWin --virtual with an isolated backend.
    • Wayland: lich asked client-side and KWin granted it (set_mode(1) then configure(1)); KDE and GNOME buttons drawn (-shot).
    • X11 (Xwayland managed by KWin): _MOTIF_WM_HINTS = 0x2, 0x0, ..., WM_CLASS lich, no frame, GNOME buttons drawn.
  • Not verified: dragging, edge resize and the double click by hand (the rig has no input); what Hyprland, sway and niri answer; Windows and macOS were not run.

The native window opened under the system's title bar, a second strip
over the topbar; on GNOME it was Gio's own, light and blind to the theme.
The window now opens undecorated: the empty run of the topbar moves it (a
double click maximizes), and minimize, maximize and close sit beside
Settings, drawn in each desktop's look: Windows 11's corner buttons,
GNOME's round ones on the side and in the order of button-layout, Breeze
under Plasma. macOS keeps its own traffic lights in a 78dp reserve at the
left, the lich mark after them.

A desktop that decorates its windows itself keeps its bar and gets no
buttons: a Wayland compositor that answers server-side to the request for
client-side decorations, or an X11 tiling WM. The Gio fork (pinned here)
carries the Wayland and X11 halves; docs/ceilings.md says what is out.
@omartelo
omartelo merged commit 73a2663 into main Oct 19, 2026
10 checks passed
@omartelo
omartelo deleted the feat/native-merged-titlebar branch October 19, 2026 19:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant