From 85d982011e9f5284a56f658a38c89d3a798fcf4c Mon Sep 17 00:00:00 2001 From: ocornut Date: Fri, 24 May 2024 17:02:10 +0200 Subject: [PATCH 1/2] Shortcuts: fixed priority of route calculation (higher first). (#456, #7618) --- imgui.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/imgui.cpp b/imgui.cpp index 38fb4496..230d6b5f 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -8633,21 +8633,22 @@ static int CalcRoutingScore(ImGuiID focus_scope_id, ImGuiID owner_id, ImGuiInput for (int index_in_focus_path = 0; index_in_focus_path < g.NavFocusRoute.Size; index_in_focus_path++) if (g.NavFocusRoute.Data[index_in_focus_path].ID == focus_scope_id) return 3 + index_in_focus_path; - return 255; } - if (flags & ImGuiInputFlags_RouteActive) + else if (flags & ImGuiInputFlags_RouteActive) { if (owner_id != 0 && g.ActiveId == owner_id) return 1; return 255; } - if (flags & ImGuiInputFlags_RouteOverFocused) - return 2; - if (flags & ImGuiInputFlags_RouteGlobal) + else if (flags & ImGuiInputFlags_RouteGlobal) + { + if (flags & ImGuiInputFlags_RouteOverActive) + return 0; + if (flags & ImGuiInputFlags_RouteOverFocused) + return 2; return 254; - if (flags & ImGuiInputFlags_RouteOverActive) - return 0; + } IM_ASSERT(0); return 0; } From 7832e6a70e66d2148564ef422bc89dc871708da1 Mon Sep 17 00:00:00 2001 From: ocornut Date: Fri, 24 May 2024 17:10:11 +0200 Subject: [PATCH 2/2] Shortcuts: Routing: fixed mixed keys<>chars filtering not applying on global routes. (#456, #7618) --- imgui.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/imgui.cpp b/imgui.cpp index 230d6b5f..40494bfc 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -8705,20 +8705,20 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, I // Specific culling when there's an active item. if (g.ActiveId != 0 && g.ActiveId != owner_id) { + if (flags & ImGuiInputFlags_RouteActive) + return false; + // Cull shortcuts with no modifiers when it could generate a character. // e.g. Shortcut(ImGuiKey_G) also generates 'g' character, should not trigger when InputText() is active. // but Shortcut(Ctrl+G) should generally trigger when InputText() is active. // TL;DR: lettered shortcut with no mods or with only Alt mod will not trigger while an item reading text input is active. // (We cannot filter based on io.InputQueueCharacters[] contents because of trickling and key<>chars submission order are undefined) - if ((flags & ImGuiInputFlags_RouteFocused) && g.IO.WantTextInput && IsKeyChordPotentiallyCharInput(key_chord)) + if (g.IO.WantTextInput && IsKeyChordPotentiallyCharInput(key_chord)) { IMGUI_DEBUG_LOG_INPUTROUTING("SetShortcutRouting(%s, flags=%04X, owner_id=0x%08X) -> filtered as potential char input\n", GetKeyChordName(key_chord), flags, owner_id); return false; } - if (flags & ImGuiInputFlags_RouteActive) - return false; - // ActiveIdUsingAllKeyboardKeys trumps all for ActiveId if ((flags & ImGuiInputFlags_RouteOverActive) == 0 && g.ActiveIdUsingAllKeyboardKeys) {