diff --git a/src/tui/editor.zig b/src/tui/editor.zig index bdac85a..2c4fbe3 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -7479,7 +7479,7 @@ pub const EditorWidget = struct { fn mouse_click_event(self: *Self, event: input.Event, btn: input.Mouse, y: c_int, x: c_int, ypx: c_int, xpx: c_int) Result { if (event != input.event.press) return; - if (!self.focused) switch (btn) { + if (!self.focused or tui.is_keyboard_focused()) switch (btn) { input.mouse.BUTTON1, input.mouse.BUTTON2, input.mouse.BUTTON3 => _ = tui.set_focus_by_mouse_event(), else => {}, }; diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index 6bde6fc..91772e4 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -1825,6 +1825,7 @@ pub fn focus_view_by_widget(self: *Self, w: Widget) tui.FocusAction { } pub fn focus_view(self: *Self, n: usize) !void { + tui.clear_keyboard_focus(); if (n == self.active_view) return; if (n > self.views.widgets.items.len) return; if (n == self.views.widgets.items.len) diff --git a/src/tui/tui.zig b/src/tui/tui.zig index 3891120..7243e03 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -852,6 +852,11 @@ pub fn set_focus_by_mouse_event() FocusAction { return .changed; } +pub fn is_keyboard_focused() bool { + const self = current(); + return self.keyboard_focus != null; +} + pub fn set_keyboard_focus(w: Widget) void { const self = current(); if (self.keyboard_focus) |prev| prev.unfocus();