feat(renaser): Fase 14 — identidad del escritorio (nombres + barra de tareas)

Las ventanas eran anónimas: el escritorio no sabía nombrar lo que
mostraba. Esta fase le pone un nombre a cada cuarto y una barra al
pie con la lista de quienes lo habitan.

- Cada `Ventana` lleva un `nombre: String` —del manifiesto, o del
  orquestador al engendrarla en vivo—. `Plantilla` lo guarda para las
  copias que `Alt+N` instancia.
- Franja `FRANJA_TASKBAR=40px` reservada al pie. `area_apps` la
  descuenta — las ventanas teselan y flotan sin tapar la barra.
- `consola`: tipos `Taskbar` / `CeldaTaskbar` + métodos `pintar_taskbar`
  y `pintar_etiqueta` (rasteriza una cadena en (x, base_y) sobre un
  fondo conocido, sin tocar la pluma). La pestaña enfocada se pinta con
  el índigo del foco, las desalojadas con su color de baliza, el resto
  con el slate del panel.
- `compositor::recomponer` arma las celdas y las pasa junto a las capas
  a la consola; un único repintado, una única presentación.
- `atender_raton`: si el clic cae en la franja de la barra,
  `celda_taskbar_en` localiza la pestaña pulsada y la enfoca (sin
  iniciar arrastre).

Verificado en QEMU: al arrancar, la barra al pie muestra las 7
pestañas con sus nombres; `tonada` enfocada en índigo, `discola` y
`glotona` en sus colores de baliza. Un clic sobre `pulso` traslada el
foco al instante — el borde del compositor envuelve `pulso` y su
pestaña se ilumina.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-23 02:05:51 +00:00
parent be4de986be
commit 6a29152feb
7 changed files with 328 additions and 19 deletions
+62
View File
@@ -946,3 +946,65 @@ enfocar y arrastre del marco de las ventanas flotantes.
envuelve a `pulso`. `Alt+F` la flota; el ratón la agarra y la arrastra de
la esquina superior izquierda al centro-abajo de la pantalla con el botón
sostenido. El kernel sigue estable a través de los gestos.
## Mapeador MMIO en el kernel — 2026-05-23
OVMF aloja los BAR prefetchables 64-bit de virtio en la ventana PCI de 64
bits, que el `bootloader_api` no mapea. `KernelHal::mmio_phys_to_virt`
devolvía `phys + offset` a ciegas y el primer registro MMIO leído reventaba
con #PF, dejando una franja roja sin pista visible. La autopsia: el commit
anterior añadió el dump del panic-handler por COM1, que sacó a la luz el IP
en `unchecked_mul::precondition_check` y la dirección de fallo
`offset + 0x800000014` — phys 32 GiB, donde OVMF había puesto el BAR.
### Añadido
- `memory::mmio`: envuelve la tabla L4 activa (vía `Cr3` + el mapeo de
memoria física del cargador) en un `OffsetPageTable`. `mapear(fisica,
tam)` abre páginas hacia la región pedida con `PRESENT | WRITABLE |
NO_CACHE | WRITE_THROUGH`, tratando `PageAlreadyMapped` y
`ParentEntryHugePage` como éxito silencioso.
- Los marcos para tablas intermedias salen del banco DMA del disco
(`asignar_marco_para_tabla`, sin pánico).
- `KernelHal::mmio_phys_to_virt` llama a `memory::mmio::mapear` antes de
devolver el puntero, asegurándose de que el BAR sea accesible.
### Cambiado
- `baliza::Serie` es ahora `pub(crate)`: cualquier módulo puede dejar
trazas por COM1. El panic-handler y el OOM-handler dejan en COM1 su
mensaje y ubicación además de pintar la franja. `kernel_main` traza
cada hito del arranque para diagnóstico remoto.
## Fase 14 — La identidad del escritorio: nombres y barra de tareas — 2026-05-23
Las ventanas eran anónimas: el escritorio reía con sus colores pero no sabía
cómo se llama lo que muestra. La Fase 14 le da nombre a cada cuarto y una
barra al pie con la lista de quien vive en la casa.
### Añadido
- Cada `Ventana` lleva un `nombre: String` —el que dicta su `EntradaApp` del
manifiesto, o el que el orquestador pasa al engendrarla en vivo (Fase 10)—.
`Plantilla` se acuerda del nombre para los lanzamientos posteriores.
- **`FRANJA_TASKBAR`** (40 px al pie) y `area_taskbar`: la barra de tareas
vive en su propia franja. `area_apps` la descuenta — las ventanas teselan
y flotan SIN tapar la barra ni la consola de la cima.
- `consola`: tipos `Taskbar` y `CeldaTaskbar`; métodos `pintar_taskbar`
(fondo + línea divisoria + una pestaña por ventana viva) y
`pintar_etiqueta` (rasteriza una cadena en un punto fijo, sin tocar la
pluma de la consola). La pestaña enfocada lleva el índigo del foco; las
desalojadas, su color de baliza; las demás, el slate del panel.
- `compositor::recomponer` arma la lista de celdas y la pasa a la consola
junto con las capas: un único repintado, una única presentación.
- `atender_raton`: un clic dentro de la franja de la barra busca su pestaña
con `celda_taskbar_en` y enfoca la ventana correspondiente (sin iniciar
arrastre). El comportamiento sobre el área de apps queda intacto.
### Cambiado
- `compositor::fundar` y `nacer_ventana` exigen un nombre para cada ventana.
`cargar_userspace` lo toma de `EntradaApp.nombre`; `lanzar_app`, de
`Plantilla.nombre`.
### Verificado
- QEMU. Tras arrancar se ve la barra al pie con las 7 pestañas (`tonada`
enfocada, índigo), las desalojadas en sus colores de baliza. Un clic
sobre `pulso` cambia el foco al instante: el borde índigo del compositor
deja la maestra y envuelve a `pulso`, y la pestaña `pulso` se ilumina.