docs: Bug teclado AdvancedTable NO RESUELTO

El bug de navegación con flechas persiste. Documentación
completa del problema y pistas de debugging para próxima sesión.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
reugenio 2025-12-17 18:54:05 +01:00
parent af1bb76aab
commit 1eed0181d6

View file

@ -0,0 +1,134 @@
# Bug: AdvancedTable Keyboard Navigation No Funciona
> **Fecha:** 2025-12-17
> **Estado:** 🔴 NO RESUELTO
> **Severidad:** ALTA
---
## Síntoma
Las flechas de teclado no mueven la selección en AdvancedTable cuando se usa en zsimifactu.
---
## Lo que sabemos
### Funciona
- El widget se renderiza correctamente
- El click en filas funciona (cambia selección)
- El sorting visual funciona (click en headers)
- `has_focus=true` cuando se hace click en la tabla
- `keyboard_nav=true` en la configuración
### No funciona
- Flechas ↑↓←→ no mueven la selección
- No hay mensajes de `selection_changed` después de presionar flechas
---
## Investigación realizada
### 1. Cambio de keyPressed a navKeyPressed
**Hipótesis:** `keyPressed()` no incluye key repeats.
**Cambio:** Línea 566 de `advanced_table.zig` usa `navKeyPressed()`.
**Resultado:** No resuelve el problema.
### 2. Debug print consumía el evento
**Descubrimiento:** Al añadir debug print que llamaba `navKeyPressed()` ANTES del bloque `if (has_focus)`, el evento se consumía y no llegaba a `handleKeyboard`.
**Evidencia:** Con debug print, aparecían mensajes `navKeyPressed=.down, has_focus=true, keyboard_nav=true` pero sin movimiento.
**Conclusión:** `navKeyPressed()` solo puede leerse UNA VEZ por frame.
### 3. Sin debug print, nada funciona
**Observación:** Al quitar el debug print, ni siquiera hay mensajes en consola.
**Implicación:** `handleKeyboard` no se está ejecutando, o `navKeyPressed()` devuelve null.
---
## Código actual relevante
### advanced_table.zig líneas 165-180
```zig
// Handle keyboard
if (has_focus) {
if (table_state.editing) {
handleEditingKeyboard(ctx, table_state, table_schema, &result);
drawEditingOverlay(ctx, bounds, table_state, table_schema, header_h, state_col_w, colors);
} else if (config.keyboard_nav) {
handleKeyboard(ctx, table_state, table_schema, visible_rows, &result);
}
}
```
### handleKeyboard líneas 570-590
```zig
if (ctx.input.navKeyPressed()) |nav_key| {
switch (nav_key) {
.up => {
if (table_state.selected_row > 0) {
table_state.selectCell(...);
result.selection_changed = true;
}
},
.down => {
if (table_state.selected_row < row_count - 1) {
table_state.selectCell(...);
result.selection_changed = true;
}
},
// ... etc
}
}
```
---
## Hipótesis pendientes de verificar
1. **¿`has_focus` es realmente true?**
- El debug mostró true, pero quizás el focus se pierde entre frames
2. **¿`navKeyPressed()` funciona en AdvancedTable?**
- Funciona en otros widgets (Table original, TextInput)
- Quizás hay algo específico del contexto de AdvancedTable
3. **¿El evento de teclado llega al widget?**
- zsimifactu tiene su propio event handling en main.zig
- Quizás los eventos se consumen antes de llegar al widget
4. **¿Hay diferencia entre Table y AdvancedTable?**
- Table original funciona con teclado
- Comparar línea por línea el handling de teclado
---
## Próximos pasos sugeridos
1. **Comparar con Table original** - El widget Table SÍ funciona con teclado. Comparar cómo maneja eventos.
2. **Añadir debug DENTRO de handleKeyboard** - No antes del `if (has_focus)`, sino dentro de la función misma.
3. **Verificar InputState.navKeyPressed()** - Ver si devuelve algo cuando AdvancedTable tiene focus.
4. **Revisar el focus system** - Quizás AdvancedTable no está registrándose correctamente en el FocusSystem.
---
## Archivos relevantes
- `/mnt/cello2/arno/re/recode/zig/zcatgui/src/widgets/advanced_table/advanced_table.zig`
- `/mnt/cello2/arno/re/recode/zig/zcatgui/src/widgets/table/table.zig` (referencia funcional)
- `/mnt/cello2/arno/re/recode/zig/zcatgui/src/core/input.zig` (navKeyPressed)
- `/mnt/cello2/arno/re/recode/zig/zsimifactu/src/panels/who_list_advanced.zig`
- `/mnt/cello2/arno/re/recode/zig/zsimifactu/src/main.zig` (event loop)
---
## Commit actual
Los cambios de "merge Table → AdvancedTable" están commiteados (af1bb76) pero el bug de teclado **NO está resuelto**.
---
*Documentado por: Claude Code (Opus 4.5)*
*Fecha: 2025-12-17 ~19:00*