|
|
|
@ -2981,11 +2981,14 @@ void ImGui::OpenPopup(const char* str_id) |
|
|
|
|
ImGuiWindow* window = GetCurrentWindow(); |
|
|
|
|
const ImGuiID id = window->GetID(str_id); |
|
|
|
|
|
|
|
|
|
// One open popup per level of the popup hierarchy
|
|
|
|
|
// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL)
|
|
|
|
|
if (g.OpenedPopupStack.size() == g.CurrentPopupStack.size()) |
|
|
|
|
g.OpenedPopupStack.push_back(ImGuiPopupRef(id)); |
|
|
|
|
else if (g.OpenedPopupStack.size() == g.CurrentPopupStack.size() + 1) |
|
|
|
|
g.OpenedPopupStack.back() = ImGuiPopupRef(id); |
|
|
|
|
{ |
|
|
|
|
if (g.OpenedPopupStack.back().PopupID != id) |
|
|
|
|
g.OpenedPopupStack.back() = ImGuiPopupRef(id); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
IM_ASSERT(0); // Invalid state
|
|
|
|
|
} |
|
|
|
@ -2995,7 +2998,7 @@ void ImGui::CloseCurrentPopup() |
|
|
|
|
ImGuiState& g = *GImGui; |
|
|
|
|
if (g.CurrentPopupStack.empty() || g.OpenedPopupStack.empty() || g.CurrentPopupStack.back().PopupID != g.OpenedPopupStack.back().PopupID) |
|
|
|
|
return; |
|
|
|
|
if (g.Windows.back()->PopupID == g.OpenedPopupStack.back().PopupID && g.Windows.size() >= 2) |
|
|
|
|
if (g.CurrentWindow->PopupID == g.OpenedPopupStack.back().PopupID && g.Windows.size() >= 2) |
|
|
|
|
FocusWindow(g.Windows[g.Windows.size()-2]); |
|
|
|
|
g.OpenedPopupStack.pop_back(); |
|
|
|
|
} |
|
|
|
@ -3301,6 +3304,7 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_ |
|
|
|
|
{ |
|
|
|
|
ImGuiPopupRef& popup_ref = g.OpenedPopupStack[g.CurrentPopupStack.size()]; |
|
|
|
|
window_was_visible &= (window->PopupID == popup_ref.PopupID); |
|
|
|
|
window_was_visible &= (window == popup_ref.Window); |
|
|
|
|
popup_ref.Window = window; |
|
|
|
|
g.CurrentPopupStack.push_back(popup_ref); |
|
|
|
|
window->PopupID = popup_ref.PopupID; |
|
|
|
|