From ae993a0f6f5a2e91ef75c579338368a63148524a Mon Sep 17 00:00:00 2001 From: "R.Eugenio" Date: Tue, 23 Dec 2025 14:18:47 +0100 Subject: [PATCH] =?UTF-8?q?fix(virtual=5Flist):=20Scroll=20en=20=C3=BAltim?= =?UTF-8?q?a=20fila=20y=20posici=C3=B3n=20correcta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - moveDown: Calcular screen position antes de decidir scroll - Scroll ahora ocurre cuando llega a última fila visible (no penúltima) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/widgets/virtual_list/state.zig | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/widgets/virtual_list/state.zig b/src/widgets/virtual_list/state.zig index 87129d3..325849c 100644 --- a/src/widgets/virtual_list/state.zig +++ b/src/widgets/virtual_list/state.zig @@ -219,8 +219,13 @@ pub const VirtualListState = struct { if (window_idx + 1 < self.current_window.len) { self.selectByWindowIndex(window_idx + 1); - // Si la nueva selección está cerca del final visible, scroll - if (window_idx + 1 >= visible_rows - 1) { + // Calcular posición en pantalla de la nueva selección + const window_offset = self.scroll_offset -| self.window_start; + const new_screen_pos = (window_idx + 1) -| window_offset; + + // Scroll cuando la nueva posición llega a la ÚLTIMA fila visible + // (visible_rows - 1 es el índice de la última fila, 0-indexed) + if (new_screen_pos >= visible_rows) { self.scroll_offset += 1; } }