|
@@ -1343,6 +1343,7 @@ void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value)
|
|
|
IM_ASSERT(&g.IO == this && "Can only add events to current context.");
|
|
|
IM_ASSERT(ImGui::IsNamedKeyOrModKey(key)); // Backend needs to pass a valid ImGuiKey_ constant. 0..511 values are legacy native key codes which are not accepted by this API.
|
|
|
IM_ASSERT(!ImGui::IsAliasKey(key)); // Backend cannot submit ImGuiKey_MouseXXX values they are automatically inferred from AddMouseXXX() events.
|
|
|
+ IM_ASSERT(key != ImGuiMod_Shortcut); // We could easily support the translation here but it seems saner to not accept it (TestEngine perform a translation itself)
|
|
|
|
|
|
// Verify that backend isn't mixing up using new io.AddKeyEvent() api and old io.KeysDown[] + io.KeyMap[] data.
|
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
|
|
@@ -4241,7 +4242,6 @@ static void ImGui::UpdateKeyboardInputs()
|
|
|
#undef NAV_MAP_KEY
|
|
|
}
|
|
|
#endif
|
|
|
-
|
|
|
#endif
|
|
|
|
|
|
// Synchronize io.KeyMods with individual modifiers io.KeyXXX bools, update aliases
|
|
@@ -7959,9 +7959,12 @@ const char* ImGui::GetKeyName(ImGuiKey key)
|
|
|
return GKeyNames[key - ImGuiKey_NamedKey_BEGIN];
|
|
|
}
|
|
|
|
|
|
+// ImGuiMod_Shortcut is translated to either Ctrl or Super.
|
|
|
void ImGui::GetKeyChordName(ImGuiKeyChord key_chord, char* out_buf, int out_buf_size)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
+ if (key_chord & ImGuiMod_Shortcut)
|
|
|
+ key_chord = ConvertShortcutMod(key_chord);
|
|
|
ImFormatString(out_buf, (size_t)out_buf_size, "%s%s%s%s%s",
|
|
|
(key_chord & ImGuiMod_Ctrl) ? "Ctrl+" : "",
|
|
|
(key_chord & ImGuiMod_Shift) ? "Shift+" : "",
|
|
@@ -8037,6 +8040,8 @@ ImGuiKeyRoutingData* ImGui::GetShortcutRoutingData(ImGuiKeyChord key_chord)
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
ImGuiKeyRoutingTable* rt = &g.KeysRoutingTable;
|
|
|
ImGuiKeyRoutingData* routing_data;
|
|
|
+ if (key_chord & ImGuiMod_Shortcut)
|
|
|
+ key_chord = ConvertShortcutMod(key_chord);
|
|
|
ImGuiKey key = (ImGuiKey)(key_chord & ~ImGuiMod_Mask_);
|
|
|
ImGuiKey mods = (ImGuiKey)(key_chord & ImGuiMod_Mask_);
|
|
|
if (key == ImGuiKey_None)
|
|
@@ -8154,7 +8159,7 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
|
|
|
bool ImGui::TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id)
|
|
|
{
|
|
|
const ImGuiID routing_id = GetRoutingIdFromOwnerId(owner_id);
|
|
|
- ImGuiKeyRoutingData* routing_data = GetShortcutRoutingData(key_chord);
|
|
|
+ ImGuiKeyRoutingData* routing_data = GetShortcutRoutingData(key_chord); // FIXME: Could avoid creating entry.
|
|
|
return routing_data->RoutingCurr == routing_id;
|
|
|
}
|
|
|
|
|
@@ -8645,12 +8650,14 @@ bool ImGui::Shortcut(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags
|
|
|
if (!SetShortcutRouting(key_chord, owner_id, flags))
|
|
|
return false;
|
|
|
|
|
|
- ImGuiKey key = (ImGuiKey)(key_chord & ~ImGuiMod_Mask_);
|
|
|
+ if (key_chord & ImGuiMod_Shortcut)
|
|
|
+ key_chord = ConvertShortcutMod(key_chord);
|
|
|
ImGuiKey mods = (ImGuiKey)(key_chord & ImGuiMod_Mask_);
|
|
|
if (g.IO.KeyMods != mods)
|
|
|
return false;
|
|
|
|
|
|
// Special storage location for mods
|
|
|
+ ImGuiKey key = (ImGuiKey)(key_chord & ~ImGuiMod_Mask_);
|
|
|
if (key == ImGuiKey_None)
|
|
|
key = ConvertSingleModFlagToKey(mods);
|
|
|
|
|
@@ -8766,7 +8773,7 @@ static void ImGui::ErrorCheckEndFrameSanityChecks()
|
|
|
// One possible reason leading to this assert is that your backends update inputs _AFTER_ NewFrame().
|
|
|
// It is known that when some modal native windows called mid-frame takes focus away, some backends such as GLFW will
|
|
|
// send key release events mid-frame. This would normally trigger this assertion and lead to sheared inputs.
|
|
|
- // We silently accommodate for this case by ignoring/ the case where all io.KeyXXX modifiers were released (aka key_mod_flags == 0),
|
|
|
+ // 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 = GetMergedModsFromBools();
|
|
|
IM_ASSERT((key_mods == 0 || g.IO.KeyMods == key_mods) && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods");
|