diff --git a/imgui.cpp b/imgui.cpp index 3641e135..c5322576 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -2337,6 +2337,7 @@ static void NavUpdate() { // Apply result from previous navigation directional move request IM_ASSERT(g.NavWindow); + ImGui::SetActiveID(0); g.NavId = g.NavWindow->NavLastId = g.NavMoveResultBestId; g.NavRefRectRel = g.NavMoveResultBestRefRectRel; g.NavMousePosDirty = true; @@ -2387,11 +2388,15 @@ static void NavUpdate() g.IO.NavActive = g.IO.NavUsable && g.NavId != 0 && !g.NavDisableHighlight; // Process NavCancel input (to close a popup, get back to parent, clear focus) - if (g.ActiveId == 0 && IsKeyPressedMap(ImGuiKey_NavCancel)) + if (IsKeyPressedMap(ImGuiKey_NavCancel)) { - // Close open popup or move back to parent window - if (g.OpenPopupStack.Size > 0) + if (g.ActiveId != 0) { + ImGui::SetActiveID(0); + } + else if (g.OpenPopupStack.Size > 0) + { + // Close open popup or move back to parent window ClosePopupToLevel(g.OpenPopupStack.Size - 1); } else @@ -6911,6 +6916,7 @@ bool ImGui::InputScalarAsWidgetReplacement(const ImRect& aabb, const char* label // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen) SetActiveIDNoNav(g.ScalarAsInputTextId, window); + g.ActiveIdAllowNavMove = true; SetHoveredID(0); FocusableItemUnregister(window); @@ -8363,6 +8369,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 select_all = true; } SetActiveID(id, window); + g.ActiveIdAllowNavMove = true; FocusWindow(window); } else if (io.MouseClicked[0])