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