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>
134 lines
4.3 KiB
Markdown
134 lines
4.3 KiB
Markdown
# 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*
|