mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +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