From 87e0e06aaf3d4aa3b4f151812f0bdbe28b01fe35 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 3 Feb 2026 18:45:44 +0100 Subject: [PATCH] fix: refresh hover when menus modify their contents This fixes hover and scroll in palettes and dropdowns. close #486 --- src/tui/mode/overlay/dropdown.zig | 2 +- src/tui/mode/overlay/open_recent.zig | 1 + src/tui/mode/overlay/palette.zig | 1 + src/tui/mode/overlay/vcs_status.zig | 1 + src/tui/tui.zig | 5 +++++ 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/tui/mode/overlay/dropdown.zig b/src/tui/mode/overlay/dropdown.zig index 5dd88af..7f6f1d6 100644 --- a/src/tui/mode/overlay/dropdown.zig +++ b/src/tui/mode/overlay/dropdown.zig @@ -276,6 +276,7 @@ pub fn Create(options: type) type { } fn start_query(self: *Self, n: usize) !void { + defer tui.reset_hover(@src()); self.items = 0; self.menu.reset_items(); self.menu.selected = null; @@ -307,7 +308,6 @@ pub fn Create(options: type) type { self.menu.select_down(); const padding = tui.get_widget_style(widget_type).padding; self.do_resize(padding); - tui.refresh_hover(@src()); self.selection_updated(); } } diff --git a/src/tui/mode/overlay/open_recent.zig b/src/tui/mode/overlay/open_recent.zig index 91a79ec..c419917 100644 --- a/src/tui/mode/overlay/open_recent.zig +++ b/src/tui/mode/overlay/open_recent.zig @@ -249,6 +249,7 @@ fn receive_project_manager(self: *Self, _: tp.pid_ref, m: tp.message) MessageFil } fn process_project_manager(self: *Self, m: tp.message) MessageFilter.Error!void { + defer tui.reset_hover(@src()); var file_name: []const u8 = undefined; var file_type: []const u8 = undefined; var file_icon: []const u8 = undefined; diff --git a/src/tui/mode/overlay/palette.zig b/src/tui/mode/overlay/palette.zig index f0c5ae9..63a541b 100644 --- a/src/tui/mode/overlay/palette.zig +++ b/src/tui/mode/overlay/palette.zig @@ -318,6 +318,7 @@ pub fn Create(options: type) type { } fn start_query(self: *Self, n: usize) !void { + defer tui.reset_hover(@src()); defer self.update_count_hint(); self.items = 0; self.menu.reset_items(); diff --git a/src/tui/mode/overlay/vcs_status.zig b/src/tui/mode/overlay/vcs_status.zig index a6687c7..ec607b6 100644 --- a/src/tui/mode/overlay/vcs_status.zig +++ b/src/tui/mode/overlay/vcs_status.zig @@ -162,6 +162,7 @@ fn receive_project_manager(self: *Self, _: tp.pid_ref, m: tp.message) MessageFil } fn process_project_manager(self: *Self, m: tp.message) MessageFilter.Error!void { + defer tui.reset_hover(@src()); var file_name: []const u8 = undefined; var file_type: []const u8 = undefined; var file_icon: []const u8 = undefined; diff --git a/src/tui/tui.zig b/src/tui/tui.zig index d6c196e..cef9e45 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -893,6 +893,11 @@ pub fn refresh_hover(src: std.builtin.SourceLocation) void { _ = self.update_hover(self.last_hover_y, self.last_hover_x) catch {}; } +pub fn reset_hover(src: std.builtin.SourceLocation) void { + const self = current(); + self.clear_hover_focus(src) catch {}; +} + pub fn save_config() (root.ConfigDirError || root.ConfigWriteError)!void { const self = current(); try root.write_config(self.config_, self.allocator);