From 91969cb728dc87c6ccf8d2f1999f82da1d8e307b Mon Sep 17 00:00:00 2001 From: reugenio Date: Sat, 27 Dec 2025 12:13:43 +0100 Subject: [PATCH] fix(virtual_advanced_table): Prevent double Tab processing - Check navigate_direction before setting tab_out in handleKeyboard - Export NavigateDirection from virtual_advanced_table module - Use cell_editor.NavigateDirection in VirtualAdvancedTableResult This fixes the bug where Tab was processed twice: once by CellEditor (for cell navigation) and again by handleKeyboard (for tab_out). --- .../virtual_advanced_table/virtual_advanced_table.zig | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/widgets/virtual_advanced_table/virtual_advanced_table.zig b/src/widgets/virtual_advanced_table/virtual_advanced_table.zig index bbb4225..d750431 100644 --- a/src/widgets/virtual_advanced_table/virtual_advanced_table.zig +++ b/src/widgets/virtual_advanced_table/virtual_advanced_table.zig @@ -43,6 +43,7 @@ pub const CellGeometry = types.CellGeometry; pub const DataProvider = data_provider.DataProvider; pub const CellEditorColors = cell_editor.CellEditorColors; pub const CellEditorResult = cell_editor.CellEditorResult; +pub const NavigateDirection = cell_editor.NavigateDirection; pub const drawCellEditor = cell_editor.drawCellEditor; pub const VirtualAdvancedTableState = state_mod.VirtualAdvancedTableState; @@ -106,7 +107,7 @@ pub const VirtualAdvancedTableResult = struct { previous_row: ?usize = null, /// Navegación solicitada después de commit - navigate_direction: cell_editor.CellEditorResult.NavigateDirection = .none, + navigate_direction: cell_editor.NavigateDirection = .none, /// Tab presionado sin edición activa (pasar focus al siguiente widget) tab_out: bool = false, @@ -1017,8 +1018,11 @@ fn handleKeyboard( }, .tab => { // Tab sin edición activa: indica que el panel debe mover focus - result.tab_out = true; - result.tab_shift = event.modifiers.shift; + // IMPORTANTE: Solo si CellEditor no procesó Tab (evita doble procesamiento) + if (result.navigate_direction == .none) { + result.tab_out = true; + result.tab_shift = event.modifiers.shift; + } }, else => {}, }