diff --git a/imgui.cpp b/imgui.cpp index 8696e243..930075f5 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -3054,9 +3054,12 @@ void ImGui::OpenPopup(const char* str_id) ImGuiState& g = *GImGui; ImGuiWindow* window = GetCurrentWindow(); const ImGuiID id = window->GetID(str_id); - g.OpenedPopupStack.resize(g.CurrentPopupStack.size() + 1); - if (g.OpenedPopupStack.back().PopupID != id) - g.OpenedPopupStack.back() = ImGuiPopupRef(id, window, window->GetID("##menus")); + size_t current_stack_size = g.CurrentPopupStack.size(); + ImGuiPopupRef popup_ref = ImGuiPopupRef(id, window, window->GetID("##menus")); // Tagged as new ref because constructor sets Window to NULL (we are passing the ParentWindow info here) + if (g.OpenedPopupStack.size() < current_stack_size + 1) + g.OpenedPopupStack.push_back(popup_ref); + else if (g.OpenedPopupStack[current_stack_size].PopupID != id) + g.OpenedPopupStack[current_stack_size] = popup_ref; } static void CloseInactivePopups()