From 223d0c09e1099694c7cecf8bde12d64ee33ec014 Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Fri, 21 Mar 2025 23:23:30 +0100 Subject: [PATCH] Fix list items stealing Enter presses --- src/tui.rs | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/tui.rs b/src/tui.rs index 2f729cf..321a1e3 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -2089,29 +2089,17 @@ impl Context<'_, '_> { let item = self.tree.last_node_ref(); let item_id = item.id; let selected_before = content.selected == item_id; - - // Clicking an item activates it - let clicked = !self.input_consumed - && (self.input_mouse_gesture == InputMouseGesture::DoubleClick && self.is_hovering()); - // Pressing Enter on a selected item activates it as well - let entered = selected_before - && !self.input_consumed - && matches!(self.input_keyboard, Some(vk::RETURN)); - let activated = clicked || entered; - if activated { - self.set_input_consumed(); - } + let focused = self.is_focused(); // Inherit the default selection & Click changes selection - let selected_now = - selected_before || (select && content.selected == 0) || self.is_focused(); + let selected_now = selected_before || (select && content.selected == 0) || focused; // Note down the selected node for keyboard navigation. if selected_now { content.selected_node = item; if !selected_before { content.selected = item_id; - self.needs_settling = true; + self.set_needs_settling(); } } @@ -2119,6 +2107,19 @@ impl Context<'_, '_> { self.styled_label_add_text(text); self.styled_label_end(); + // Clicking an item activates it + let clicked = !self.input_consumed + && (self.input_mouse_gesture == InputMouseGesture::DoubleClick && self.is_hovering()); + // Pressing Enter on a selected item activates it as well + let entered = focused + && selected_before + && !self.input_consumed + && matches!(self.input_keyboard, Some(vk::RETURN)); + let activated = clicked || entered; + if activated { + self.set_input_consumed(); + } + if selected_before && activated { ListSelection::Activated } else if selected_now && !selected_before {