|
@@ -3829,7 +3829,10 @@ void ImGui::UpdateTabFocus()
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
|
|
|
// Pressing TAB activate widget focus
|
|
|
- g.TabFocusPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab) && !IsActiveIdUsingKey(ImGuiKey_Tab));
|
|
|
+ g.TabFocusPressed = false;
|
|
|
+ if (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
|
|
|
+ if (!g.IO.KeyCtrl && !g.IO.KeyAlt && IsKeyPressedMap(ImGuiKey_Tab) && !IsActiveIdUsingKey(ImGuiKey_Tab))
|
|
|
+ g.TabFocusPressed = true;
|
|
|
if (g.ActiveId == 0 && g.TabFocusPressed)
|
|
|
{
|
|
|
// - This path is only taken when no widget are active/tabbed-into yet.
|
|
@@ -7091,15 +7094,17 @@ void ImGui::SetItemDefaultFocus()
|
|
|
ImGuiWindow* window = g.CurrentWindow;
|
|
|
if (!window->Appearing)
|
|
|
return;
|
|
|
- if (g.NavWindow == window->RootWindowForNav && (g.NavInitRequest || g.NavInitResultId != 0) && g.NavLayer == window->DC.NavLayerCurrent)
|
|
|
- {
|
|
|
- g.NavInitRequest = false;
|
|
|
- g.NavInitResultId = g.LastItemData.ID;
|
|
|
- g.NavInitResultRectRel = ImRect(g.LastItemData.Rect.Min - window->Pos, g.LastItemData.Rect.Max - window->Pos);
|
|
|
- NavUpdateAnyRequestFlag();
|
|
|
- if (!IsItemVisible())
|
|
|
- SetScrollHereY();
|
|
|
- }
|
|
|
+ if (g.NavWindow != window->RootWindowForNav || (!g.NavInitRequest && g.NavInitResultId == 0) || g.NavLayer != window->DC.NavLayerCurrent)
|
|
|
+ return;
|
|
|
+
|
|
|
+ g.NavInitRequest = false;
|
|
|
+ g.NavInitResultId = g.LastItemData.ID;
|
|
|
+ g.NavInitResultRectRel = ImRect(g.LastItemData.Rect.Min - window->Pos, g.LastItemData.Rect.Max - window->Pos);
|
|
|
+ NavUpdateAnyRequestFlag();
|
|
|
+
|
|
|
+ // Scroll could be done in NavInitRequestApplyResult() via a opt-in flag (we however don't want regular init requests to scroll)
|
|
|
+ if (!IsItemVisible())
|
|
|
+ ScrollToRectEx(window, g.LastItemData.Rect, ImGuiScrollFlags_None);
|
|
|
}
|
|
|
|
|
|
void ImGui::SetStateStorage(ImGuiStorage* tree)
|
|
@@ -9323,7 +9328,7 @@ static void ImGui::NavUpdate()
|
|
|
}
|
|
|
g.NavIdIsAlive = false;
|
|
|
g.NavJustTabbedId = 0;
|
|
|
- IM_ASSERT(g.NavLayer == 0 || g.NavLayer == 1);
|
|
|
+ IM_ASSERT(g.NavLayer == ImGuiNavLayer_Main || g.NavLayer == ImGuiNavLayer_Menu);
|
|
|
|
|
|
// Store our return window (for returning from Menu Layer to Main Layer) and clear it as soon as we step back in our own Layer 0
|
|
|
if (g.NavWindow)
|