feat(mirada): fullscreen iniciado por el cliente + HUD multi-salida

Dos remates de la tanda WM.

Fullscreen del cliente:
- BodyEvent::FullscreenRequest { id, fullscreen }. mirada-compositor
  implementa XdgShellHandler::fullscreen_request / unfullscreen_request
  y avisa al Cerebro; Desktop::on_event fija el fullscreen en el
  escritorio que tiene la ventana. Así un reproductor o un juego que
  llama a xdg set_fullscreen entra a pantalla completa solo.

HUD multi-salida (app mirada):
- El lienzo dibuja todas las salidas a escala (encaja su caja
  envolvente en el lienzo fijo; con una salida, 1:1), cada una con su
  marco y su número/escritorio. En simulación, Shift+n añade un monitor.

mirada-brain 63->65 tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 01:32:08 +00:00
parent 13d2ae71fb
commit f9c4bf594e
6 changed files with 143 additions and 9 deletions
+6 -3
View File
@@ -72,7 +72,8 @@ ejecuta operaciones de geometría".
devuelven los `BodyEvent` a mandar. Ejemplo `headless`: un Cuerpo sin
gráficos guiado por stdin para ejercitar el bucle entero.
- **`mirada` (app)** — envuelve `Desktop` y lo pinta (barra de
escritorios + modo + foco, lienzo teselado). Con `MIRADA_SOCKET`
escritorios + modo + foco, lienzo teselado). El lienzo dibuja **todas
las salidas a escala**, cada una con su marco. Con `MIRADA_SOCKET`
conecta a un Cuerpo; sin él corre en **simulación** (ventanas
sintéticas, teclado de la propia ventana). Pips de escritorio y
ventanas clicables.
@@ -122,7 +123,9 @@ que un front-end (`Keybind` → `lookup` → `apply`); hay otros tres:
- **Pantalla completa** — `ToggleFullscreen` (`Super+Shift+f`): la ventana
cubre toda la salida (sin gap), oculta al resto y se lleva el foco;
`Workspace.fullscreen: Option<WindowId>`, y el Cuerpo le fija el estado
`xdg_toplevel Fullscreen`.
`xdg_toplevel Fullscreen`. También atiende la petición del propio
cliente (`xdg set_fullscreen``BodyEvent::FullscreenRequest`), así
que un reproductor o un juego entran a pantalla completa solos.
- **Multi-monitor** — cada `Output` muestra un escritorio distinto;
`SwitchWorkspace` actúa sobre la salida enfocada (y la intercambia si
el escritorio pedido ya lo muestra otra salida); `FocusOutputNext`
@@ -175,7 +178,7 @@ a las ya abiertas.
## Estado
Implementado y verde: `mirada-layout` (32 tests), `mirada-protocol`
(11), `mirada-brain` (63), `mirada-link` (7), `mirada-body` (14), las
(11), `mirada-brain` (65), `mirada-link` (7), `mirada-body` (14), las
apps `mirada` y `mirada-compositor` (compilan; verificación visual
manual) y `mirada-ctl` (CLI, probado vía el ejemplo `headless-ctl`).