From 78dc54ab3d227ef8059ab7d306ee96d55c7914f5 Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 28 May 2015 23:37:11 +0100 Subject: [PATCH] Popups: calling OpenPopup() on already open popup doesn't close it's child (#126) It think it makes more sense? Maybe? Note that calling OpenPopup() every frame probably doesn't make sense. --- imgui.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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()