From 72e5526676a5cec312519917481b1962dffcc223 Mon Sep 17 00:00:00 2001 From: ocornut Date: Wed, 12 Apr 2023 19:44:41 +0200 Subject: [PATCH] RangeSelect/MultiSelect: Enter doesn't alter selection (unlike Space). Fix for changes done in 5606. --- imgui_widgets.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index 53f1488e..0ccecb1c 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -7190,7 +7190,11 @@ void ImGui::MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed) } } - if (pressed) + // Unlike Space, Enter doesn't alter selection (but can still return a press) + const bool enter_pressed = pressed && (g.NavActivateId == id) && (g.NavActivateFlags & ImGuiActivateFlags_PreferInput); + + // Alter selection + if (pressed && !enter_pressed) { //------------------------------------------------------------------------------------------------------------------------------------------------- // ACTION | Begin | Item Old | Item New | End @@ -7202,7 +7206,7 @@ void ImGui::MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed) // Mouse Pressed, Ctrl=0, Shift=1 | n/a | n/a | Dst=item, Pressed -> Sel=1, Out.Clear, Out.SetRange=1 | Clear + SetRange //------------------------------------------------------------------------------------------------------------------------------------------------- - ImGuiInputSource input_source = (g.NavJustMovedToId != 0 && g.NavWindow == window && g.NavJustMovedToId == g.LastItemData.ID) ? g.NavInputSource : ImGuiInputSource_Mouse; + ImGuiInputSource input_source = (g.NavJustMovedToId == id || g.NavActivateId == id) ? g.NavInputSource : ImGuiInputSource_Mouse; if (is_shift && is_multiselect) { ms->Out.RequestSetRange = true; @@ -7218,7 +7222,7 @@ void ImGui::MultiSelectItemFooter(ImGuiID id, bool* p_selected, bool* p_pressed) ms->Out.RangeValue = selected; } - if (input_source == ImGuiInputSource_Mouse) + if (input_source == ImGuiInputSource_Mouse || g.NavActivateId == id) { // Mouse click without CTRL clears the selection, unless the clicked item is already selected bool preserve_existing_selection = g.DragDropActive;