feat(mirada): multi-monitor real — cada salida tesela su escritorio
El Desktop deja de teselar sólo la salida primaria. Cada Output muestra
un escritorio virtual distinto y relayout() las tesela todas en un solo
Place que cubre todas las pantallas.
- Output { id, rect, workspace }; focused_output reemplaza al índice
global active. active_index() = el escritorio de la salida enfocada.
- OutputAdded asigna el primer escritorio libre; OutputRemoved deja sus
ventanas en su escritorio y reajusta el foco. reflow_outputs() las
recoloca en fila.
- SwitchWorkspace actúa sobre la salida enfocada; si el escritorio
pedido ya lo muestra otra salida, las intercambia (invariante: un
escritorio se ve en una salida como mucho).
- DesktopAction::FocusOutputNext (Super+o) mueve el foco entre
monitores. El foco del teclado es único — relayout() lo unifica a la
ventana enfocada de la salida enfocada.
Verificado end-to-end con headless-ctl (ahora 2 salidas).
mirada-brain 52->58 tests.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -62,7 +62,8 @@ ejecuta operaciones de geometría".
|
||||
- **`mirada-brain`** — `Desktop`: salidas, 9 escritorios virtuales,
|
||||
registro de ventanas. `on_event(BodyEvent) -> Vec<BrainCommand>`;
|
||||
`DesktopAction` + `Keymap` configurable (`set_keymap` en caliente) +
|
||||
`Rules` de ventana.
|
||||
`Rules` de ventana. **Multi-monitor**: cada `Output` muestra un
|
||||
escritorio; `relayout()` tesela todas las salidas en un solo `Place`.
|
||||
- **`mirada-link`** — `Link<Out,In>` sobre socket Unix; hilo lector de
|
||||
fondo + canal `mpsc` para sondeo no bloqueante. `BrainLink`/`BodyLink`,
|
||||
`connected_pair` (socketpair), `connect`/`listen` por ruta.
|
||||
@@ -122,6 +123,11 @@ que un front-end (`Keybind` → `lookup` → `apply`); hay otros tres:
|
||||
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`.
|
||||
- **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`
|
||||
(`Super+o`) mueve el foco entre monitores. El foco del teclado es
|
||||
único — sólo la ventana enfocada de la salida enfocada.
|
||||
- **Layout y área maestra por el API** — los 7 modos se intercambian
|
||||
(`SetLayout`/`CycleLayout`, `mirada-ctl layout spiral`); el área
|
||||
maestra se redimensiona (`grow`/`shrink-master`, `Super+l`/`Super+h`);
|
||||
@@ -164,7 +170,7 @@ a las ya abiertas.
|
||||
## Estado
|
||||
|
||||
Implementado y verde: `mirada-layout` (32 tests), `mirada-protocol`
|
||||
(11), `mirada-brain` (52), `mirada-link` (7), `mirada-body` (14), las
|
||||
(11), `mirada-brain` (58), `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`).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user