瀏覽代碼

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.
ocornut 10 年之前
父節點
當前提交
78dc54ab3d
共有 1 個文件被更改,包括 6 次插入3 次删除
  1. 6 3
      imgui.cpp

+ 6 - 3
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()