Error Handling: fixed not rewinding to recorded tree and id stack size (#1651)

This commit is contained in:
ocornut 2024-09-26 17:51:46 +02:00
parent 30c29d291f
commit 199a44e31e
2 changed files with 4 additions and 2 deletions

View File

@ -10465,6 +10465,7 @@ void ImGui::ErrorRecoveryStoreState(ImGuiErrorRecoveryState* state_out)
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
state_out->SizeOfWindowStack = (short)g.CurrentWindowStack.Size; state_out->SizeOfWindowStack = (short)g.CurrentWindowStack.Size;
state_out->SizeOfIDStack = (short)g.CurrentWindow->IDStack.Size; state_out->SizeOfIDStack = (short)g.CurrentWindow->IDStack.Size;
state_out->SizeOfTreeStack = (short)g.CurrentWindow->DC.TreeDepth; // NOT g.TreeNodeStack.Size which is a partial stack!
state_out->SizeOfColorStack = (short)g.ColorStack.Size; state_out->SizeOfColorStack = (short)g.ColorStack.Size;
state_out->SizeOfStyleVarStack = (short)g.StyleVarStack.Size; state_out->SizeOfStyleVarStack = (short)g.StyleVarStack.Size;
state_out->SizeOfFontStack = (short)g.FontStack.Size; state_out->SizeOfFontStack = (short)g.FontStack.Size;
@ -10531,7 +10532,7 @@ void ImGui::ErrorRecoveryTryToRecoverWindowState(const ImGuiErrorRecoveryStat
IM_ASSERT_USER_ERROR(0, "Missing EndMultiSelect()"); IM_ASSERT_USER_ERROR(0, "Missing EndMultiSelect()");
EndMultiSelect(); EndMultiSelect();
} }
while (window->DC.TreeDepth > 0) while (window->DC.TreeDepth > state_in->SizeOfTreeStack) //-V1044
{ {
IM_ASSERT_USER_ERROR(0, "Missing TreePop()"); IM_ASSERT_USER_ERROR(0, "Missing TreePop()");
TreePop(); TreePop();
@ -10542,7 +10543,7 @@ void ImGui::ErrorRecoveryTryToRecoverWindowState(const ImGuiErrorRecoveryStat
EndGroup(); EndGroup();
} }
IM_ASSERT(g.GroupStack.Size == state_in->SizeOfGroupStack); IM_ASSERT(g.GroupStack.Size == state_in->SizeOfGroupStack);
while (window->IDStack.Size > 1) while (window->IDStack.Size > state_in->SizeOfIDStack) //-V1044
{ {
IM_ASSERT_USER_ERROR(0, "Missing PopID()"); IM_ASSERT_USER_ERROR(0, "Missing PopID()");
PopID(); PopID();

View File

@ -1258,6 +1258,7 @@ struct IMGUI_API ImGuiErrorRecoveryState
{ {
short SizeOfWindowStack; short SizeOfWindowStack;
short SizeOfIDStack; short SizeOfIDStack;
short SizeOfTreeStack;
short SizeOfColorStack; short SizeOfColorStack;
short SizeOfStyleVarStack; short SizeOfStyleVarStack;
short SizeOfFontStack; short SizeOfFontStack;