799dcef22e
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>
35 lines
1.5 KiB
Rust
35 lines
1.5 KiB
Rust
//! `mirada-brain` — el orquestador de escritorio del compositor.
|
|
//!
|
|
//! Es el "Cerebro" de mirada sin pantalla: mantiene el estado del
|
|
//! escritorio (salidas, escritorios virtuales, ventanas, foco), consume
|
|
//! los [`BodyEvent`]s que reporta el Cuerpo y produce los
|
|
//! [`BrainCommand`]s que el Cuerpo aplica.
|
|
//!
|
|
//! Es agnóstico de GPUI y de `smithay`: una app GPUI sólo lo *envuelve*
|
|
//! para pintar un HUD y para mover los bytes por el cable de
|
|
//! [`mirada_protocol`]. Toda la lógica vive aquí y es determinista —
|
|
//! la misma secuencia de eventos da siempre el mismo estado.
|
|
//!
|
|
//! - [`action`] — las acciones de escritorio y el mapa de teclas.
|
|
//! - [`desktop`] — el [`Desktop`]: el estado y el bucle `evento → comandos`.
|
|
//! - [`keymap`] — el [`Keymap`] configurable en RON, recargable en caliente.
|
|
//! - [`rules`] — las [`Rules`] de ventana (escritorio/flotante por `app_id`).
|
|
//! - [`ctl`] — el API de control externo (`mirada-ctl`, taskbars, scripts).
|
|
|
|
#![forbid(unsafe_code)]
|
|
|
|
pub mod action;
|
|
pub mod ctl;
|
|
pub mod desktop;
|
|
pub mod keymap;
|
|
pub mod rules;
|
|
|
|
pub use action::{default_keymap, DesktopAction, WORKSPACE_COUNT};
|
|
pub use ctl::{CtlConn, CtlReply, CtlRequest, CtlServer, WindowLine};
|
|
pub use desktop::{Desktop, Output, WindowInfo};
|
|
pub use keymap::{Keymap, KeymapError, KeymapWatch};
|
|
pub use rules::{Rule, RuleOutcome, Rules};
|
|
|
|
pub use mirada_layout::{LayoutMode, LayoutParams, Rect, WindowId, Workspace};
|
|
pub use mirada_protocol::{BodyEvent, BrainCommand, OutputId, WindowPlacement};
|