Files
velzieandClaude Opus 5.5 de321e870a Compositor: gex_window_placement_v1, windows placed and stacked by their clients.
A window system with real coordinates (Win32 under Wine) says where each
window is, which layer it is in (normal, topmost, overlay) and which
window it is directly under; the compositor shows it there, stacks it
there, does not cascade, size, decorate (set_unmanaged), raise or focus it
on its own, and gives it the keyboard when the client activates it
(protocols/gex-window-placement-v1.xml).

One placement path: an X11 override-redirect window is given the same
placement state by adopt_x11 (overlay layer, its XID as stack id), so the
browser compositor draws, stacks and hit-tests X menus and Win32 windows
by the same code -- #floating is gone; everything is in one stack, drawn
a layer at a time. A held button on a placed window keeps the pointer
(Wayland's implicit grab). Surface records grow to 33 words (R_PLACE..
R_ACTIVATE). The DOM compositor reports placed positions (onplace),
restacks (onrestack) and activations.

Also:
- wp_viewport.set_source crops the buffer: Wine keeps a window's buffer
  when the window shrinks, and a 40-pixel taskbar showed as its 125-pixel
  buffer.
- Native host: a client's requests are read only by a pump in the client's
  own process. A commit read in another process found neither the shared
  mapping nor the memory and was dropped -- a Wine session showed one frame
  in minutes. The native screen keeps every surface's last frame once
  anything is placed, draws placed windows where they are (gex-gpu
  draw_at), routes scripted input by hit test, and prints the window list
  ([wl-place]) when it changes.

On top of the output scale (wl_output.scale, dpr): a placed window's
position is scaled like any toplevel's and kept in the same geometry
(win.x/win.y), so drawing, hit-testing and later move/resize code read one
state whoever decided it; motion under a placed window's implicit grab is
in surface units too. X11 menus are drawn from the one stack (no separate
floating pass), and the cursor stays the page's CSS cursor.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_ea9f71488b6e448da93d6c2dabf4879c
2026-10-13 00:13:43 -04:00
..