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:
parent
af1bb76aab
commit
1eed0181d6
1 changed files with 134 additions and 0 deletions
134
docs/BUG_ADVANCEDTABLE_KEYBOARD_2025-12-17.md
Normal file
134
docs/BUG_ADVANCEDTABLE_KEYBOARD_2025-12-17.md
Normal 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*
|
||||
Loading…
Reference in a new issue