mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Fixed CloseCurrentPopup() on a child-menu of a modal incorrectly closing the modal. (#2308)
This commit is contained in:
		@@ -36,6 +36,7 @@ HOW TO UPDATE?
 | 
			
		||||
Other Changes:
 | 
			
		||||
- 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 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.
 | 
			
		||||
- 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]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6837,8 +6837,21 @@ void ImGui::CloseCurrentPopup()
 | 
			
		||||
    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)
 | 
			
		||||
        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--;
 | 
			
		||||
    }
 | 
			
		||||
    //IMGUI_DEBUG_LOG("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
 | 
			
		||||
    ClosePopupToLevel(popup_idx, true);
 | 
			
		||||
 | 
			
		||||
    // 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.."))
 | 
			
		||||
            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.");
 | 
			
		||||
 | 
			
		||||
            // Testing behavior of widgets stacking their own regular popups over the modal.
 | 
			
		||||
            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 };
 | 
			
		||||
            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.."))
 | 
			
		||||
                ImGui::OpenPopup("Stacked 2");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user