From 3ea039f41cc4b1610735565e153fa79400b7302f Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 20 Jun 2024 22:21:49 +0200 Subject: [PATCH] fix(tui): reset drag context when invalidating the widget tree This prevents a segfault if dragging and navigating at the same time. --- src/tui/mainview.zig | 3 +++ src/tui/tui.zig | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index e9418eb..14bc4ed 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -166,6 +166,7 @@ const cmds = struct { } pub fn navigate(self: *Self, ctx: Ctx) tp.result { + tui.reset_drag_context(); const frame = tracy.initZone(@src(), .{ .name = "navigate" }); defer frame.deinit(); var file: ?[]const u8 = null; @@ -231,6 +232,7 @@ const cmds = struct { } pub fn open_help(self: *Self, _: Ctx) tp.result { + tui.reset_drag_context(); try self.create_editor(); try command.executeName("open_scratch_buffer", command.fmt(.{ "help.md", @embedFile("help.md") })); tui.need_render(); @@ -426,6 +428,7 @@ fn show_home_async(_: *Self) void { } fn create_home(self: *Self) tp.result { + tui.reset_drag_context(); if (self.editor) |_| return; var home_widget = home.create(self.a, Widget.to(self)) catch |e| return tp.exit_error(e); errdefer home_widget.deinit(self.a); diff --git a/src/tui/tui.zig b/src/tui/tui.zig index f7487f8..318f292 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -664,6 +664,11 @@ pub fn get_mode() []const u8 { return if (current().input_mode) |m| m.name else "INI"; } +pub fn reset_drag_context() void { + const self = current(); + self.drag_source = null; +} + pub fn need_render() void { const self = current(); if (!(self.render_pending or self.frame_clock_running)) {