From b8f93a8fe0980cdcd9ec58dd529a4f1daac4a78e Mon Sep 17 00:00:00 2001 From: ocornut Date: Fri, 1 Sep 2023 12:15:08 +0200 Subject: [PATCH] IO: ImGuiMod_Shortcut (Ctrl/Cmd depending on platform) is reflected in io.KeyMods. (#5923, #456) --- docs/CHANGELOG.txt | 1 + imgui.cpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 75635670..8b62a9ca 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -68,6 +68,7 @@ Other changes: - ImDrawList: Automatically calling ChannelsMerge() if not done after a split. - ImDrawList: Fixed OOB access in _CalcCircleAutoSegmentCount when passing excessively large radius to AddCircle(). (#6657, #5317) [@EggsyCRO, @jdpatdiscord] +- IO: ImGuiMod_Shortcut (Ctrl/Cmd depending on platform) is reflected in io.KeyMods. (#5923, #456) - IO: Exposed io.PlatformLocaleDecimalPoint to configure decimal point ('.' or ',') for languages needing it. Should ideally be set to the value of '*localeconv()->decimal_point' but our backends don't do it yet. (#6719, #2278) diff --git a/imgui.cpp b/imgui.cpp index 2843fbaf..7db25e67 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -8480,6 +8480,7 @@ static ImGuiKeyChord GetMergedModsFromKeys() if (ImGui::IsKeyDown(ImGuiMod_Shift)) { mods |= ImGuiMod_Shift; } if (ImGui::IsKeyDown(ImGuiMod_Alt)) { mods |= ImGuiMod_Alt; } if (ImGui::IsKeyDown(ImGuiMod_Super)) { mods |= ImGuiMod_Super; } + if (ImGui::IsKeyDown(ImGuiMod_Shortcut)) { mods |= ImGuiMod_Shortcut; } return mods; } @@ -9226,7 +9227,7 @@ static void ImGui::ErrorCheckEndFrameSanityChecks() // We silently accommodate for this case by ignoring the case where all io.KeyXXX modifiers were released (aka key_mod_flags == 0), // while still correctly asserting on mid-frame key press events. const ImGuiKeyChord key_mods = GetMergedModsFromKeys(); - IM_ASSERT((key_mods == 0 || g.IO.KeyMods == key_mods) && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods"); + IM_ASSERT((key_mods == 0 || (g.IO.KeyMods & ~ImGuiMod_Shortcut ) == (key_mods & ~ImGuiMod_Shortcut)) && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods"); IM_UNUSED(key_mods); // [EXPERIMENTAL] Recover from errors: You may call this yourself before EndFrame().