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: | 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"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user