mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-24 05:19:02 +08:00
Fixed CloseCurrentPopup() on a child-menu of a modal incorrectly closing the modal. (#2308)
This commit is contained in:
parent
13ca2fe845
commit
8a4422b2fa
@ -36,6 +36,7 @@ HOW TO UPDATE?
|
|||||||
Other Changes:
|
Other Changes:
|
||||||
- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba]
|
- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba]
|
||||||
- Fixed range-version of PushID() and GetID() not honoring the ### operator to restart from the seed value.
|
- Fixed range-version of PushID() and GetID() not honoring the ### operator to restart from the seed value.
|
||||||
|
- Fixed CloseCurrentPopup() on a child-menu of a modal incorrectly closing the modal. (#2308)
|
||||||
- Window: When resizing from an edge, the border is more visible and better follow the rounded corners.
|
- Window: When resizing from an edge, the border is more visible and better follow the rounded corners.
|
||||||
- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle"
|
- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle"
|
||||||
with a small number of segments (e.g. an hexagon). (#2287) [@baktery]
|
with a small number of segments (e.g. an hexagon). (#2287) [@baktery]
|
||||||
|
15
imgui.cpp
15
imgui.cpp
@ -6837,8 +6837,21 @@ void ImGui::CloseCurrentPopup()
|
|||||||
int popup_idx = g.BeginPopupStack.Size - 1;
|
int popup_idx = g.BeginPopupStack.Size - 1;
|
||||||
if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
|
if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
|
||||||
return;
|
return;
|
||||||
while (popup_idx > 0 && g.OpenPopupStack[popup_idx].Window && (g.OpenPopupStack[popup_idx].Window->Flags & ImGuiWindowFlags_ChildMenu))
|
|
||||||
|
// Closing a menu closes its top-most parent popup (unless a modal)
|
||||||
|
while (popup_idx > 0)
|
||||||
|
{
|
||||||
|
ImGuiWindow* popup_window = g.OpenPopupStack[popup_idx].Window;
|
||||||
|
ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window;
|
||||||
|
bool close_parent = false;
|
||||||
|
if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu))
|
||||||
|
if (parent_popup_window == NULL || !(parent_popup_window->Flags & ImGuiWindowFlags_Modal))
|
||||||
|
close_parent = true;
|
||||||
|
if (!close_parent)
|
||||||
|
break;
|
||||||
popup_idx--;
|
popup_idx--;
|
||||||
|
}
|
||||||
|
//IMGUI_DEBUG_LOG("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
|
||||||
ClosePopupToLevel(popup_idx, true);
|
ClosePopupToLevel(popup_idx, true);
|
||||||
|
|
||||||
// A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
|
// A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
|
||||||
|
@ -2171,13 +2171,24 @@ static void ShowDemoWindowPopups()
|
|||||||
|
|
||||||
if (ImGui::Button("Stacked modals.."))
|
if (ImGui::Button("Stacked modals.."))
|
||||||
ImGui::OpenPopup("Stacked 1");
|
ImGui::OpenPopup("Stacked 1");
|
||||||
if (ImGui::BeginPopupModal("Stacked 1"))
|
if (ImGui::BeginPopupModal("Stacked 1", NULL, ImGuiWindowFlags_MenuBar))
|
||||||
{
|
{
|
||||||
|
if (ImGui::BeginMenuBar())
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("File"))
|
||||||
|
{
|
||||||
|
if (ImGui::MenuItem("Dummy menu item")) {}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
ImGui::EndMenuBar();
|
||||||
|
}
|
||||||
ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it.");
|
ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it.");
|
||||||
|
|
||||||
|
// Testing behavior of widgets stacking their own regular popups over the modal.
|
||||||
static int item = 1;
|
static int item = 1;
|
||||||
ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
|
|
||||||
static float color[4] = { 0.4f,0.7f,0.0f,0.5f };
|
static float color[4] = { 0.4f,0.7f,0.0f,0.5f };
|
||||||
ImGui::ColorEdit4("color", color); // This is to test behavior of stacked regular popups over a modal
|
ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
|
||||||
|
ImGui::ColorEdit4("color", color);
|
||||||
|
|
||||||
if (ImGui::Button("Add another modal.."))
|
if (ImGui::Button("Add another modal.."))
|
||||||
ImGui::OpenPopup("Stacked 2");
|
ImGui::OpenPopup("Stacked 2");
|
||||||
|
Loading…
Reference in New Issue
Block a user