LavaUI docs

enum WindowFrame

Control plane

enum WindowFrame : u32

Who draws a window's non-client area.

The compositor's title bar is a service, not a law: it exists so that every client gets a drag handle and a close button without writing one, and so that a client which has stopped answering can still be closed. An app that does write its own gets nothing from it but a 32-pixel strip of somebody else's design above its own, which is exactly the space a toolbar it is already drawing would have used.

So it is the client's choice, made once, at CreateSurface — not a call that turns the strip off later, which would mean opening a window with a frame and taking it away a frame afterwards.

What the compositor keeps either way is everything that cannot be trusted to the client: where the window is, whether it is maximized, which workspace it is on, and the pointer that resizes it. A client window asks for those through BeginMove, ToggleMaximize and Minimize rather than doing them itself, and a client that never asks is a client with a window the user can still move.

Wayland windows are not offered this. Their frame is negotiated through xdg-decoration, which is a protocol this one has no business duplicating.

idl/lava.npidl:97

Cases

client = 1

Nobody. The surface is the window — no strip, no reserved height, and the client's own first row of pixels is the top of the window.

idl/lava.npidl

server = 0

The compositor draws a title bar above the content: the title, the buttons, and the strip they sit in. The default, and what an app that does not think about window chrome should have.

idl/lava.npidl