Nav: Fixed NavRectRel being cleared for one frame when restoring layer 0 with Alt/Menu key or Escape. Maybe was inconsequential. (#787)
diff --git a/imgui.cpp b/imgui.cpp
index 1e0b6f6..92cefa9 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -2248,6 +2248,16 @@
return new_best;
}
+static void NavRestoreLayer(int layer)
+{
+ ImGuiContext& g = *GImGui;
+ g.NavLayer = layer;
+ if (layer == 0 && g.NavWindow->NavLastIds[0] != 0)
+ SetNavIDAndMoveMouse(g.NavWindow->NavLastIds[0], layer, g.NavWindow->NavRectRel[0]);
+ else
+ ImGui::NavInitWindow(g.NavWindow, true);
+}
+
static inline void NavUpdateAnyRequestFlag()
{
ImGuiContext& g = *GImGui;
@@ -2825,13 +2835,9 @@
{
if ((g.NavWindow->DC.NavLayerActiveMask & (1 << 1)) == 0 && (g.NavWindow->RootWindow->DC.NavLayerActiveMask & (1 << 1)) != 0)
FocusWindow(g.NavWindow->RootWindow);
- g.NavLayer = (g.NavWindow->DC.NavLayerActiveMask & (1 << 1)) ? (g.NavLayer ^ 1) : 0;
g.NavDisableHighlight = false;
g.NavDisableMouseHover = true;
- if (g.NavLayer == 0 && g.NavWindow->NavLastIds[0] != 0)
- SetNavIDAndMoveMouse(g.NavWindow->NavLastIds[0], g.NavLayer, ImRect());
- else
- NavInitWindow(g.NavWindow, true);
+ NavRestoreLayer((g.NavWindow->DC.NavLayerActiveMask & (1 << 1)) ? (g.NavLayer ^ 1) : 0);
}
}
@@ -2971,11 +2977,7 @@
else if (g.NavLayer != 0)
{
// Leave the "menu" layer
- g.NavLayer = 0;
- if (g.NavWindow->NavLastIds[0])
- SetNavIDAndMoveMouse(g.NavWindow->NavLastIds[0], g.NavLayer, ImRect());
- else
- NavInitWindow(g.NavWindow, true);
+ NavRestoreLayer(0);
}
else
{