mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	BeginPopupModal() doesn't set the ImGuiWindowFlags_NoSavedSettings flag anymore, and will not always be auto-centered. (#915, #3091)
# Conflicts: # imgui.cpp
This commit is contained in:
		@@ -127,6 +127,10 @@ Other Changes:
 | 
			
		||||
  would attempt to focus it and close other popups. (#2880)
 | 
			
		||||
- Popups: Fix BeginPopupContextVoid() when clicking over the area made unavailable by a modal. (#1636)
 | 
			
		||||
- Popups: Clarified some of the comments and function prototypes.
 | 
			
		||||
- Modals: BeginPopupModal() doesn't set the ImGuiWindowFlags_NoSavedSettings flag anymore, and will
 | 
			
		||||
  not always be auto-centered. Note that modals are more similar to regular windows than they are to
 | 
			
		||||
  popups, so api and behavior may evolve further toward embracing this. (#915, #3091) 
 | 
			
		||||
  Enforce centering using e.g. SetNextWindowPos(io.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f,0.5f)).
 | 
			
		||||
- Metrics: Added a "Settings" section with some details about persistent ini settings.
 | 
			
		||||
- Nav, Menus: Fix vertical wrap-around in menus or popups created with multiple appending calls to
 | 
			
		||||
  BeginMenu()/EndMenu() or BeginPopup/EndPopup(). (#3223, #1207) [@rokups]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6191,7 +6191,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
			
		||||
        if (window_just_activated_by_user)
 | 
			
		||||
        {
 | 
			
		||||
            window->AutoPosLastDirection = ImGuiDir_None;
 | 
			
		||||
            if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api)
 | 
			
		||||
            if ((flags & ImGuiWindowFlags_Popup) != 0 && !(flags & ImGuiWindowFlags_Modal) && !window_pos_set_by_api) // FIXME: BeginPopup() could use SetNextWindowPos()
 | 
			
		||||
                window->Pos = g.BeginPopupStack.back().OpenPopupPos;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -8547,6 +8547,7 @@ void ImGui::CloseCurrentPopup()
 | 
			
		||||
        window->DC.NavHideHighlightOneFrame = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Attention! BeginPopup() adds default flags which BeginPopupEx()!
 | 
			
		||||
bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags flags)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
@@ -8595,15 +8596,16 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Center modal windows by default
 | 
			
		||||
    // Center modal windows by default for increased visibility
 | 
			
		||||
    // (this won't really last as settings will kick in, and is mostly for backward compatibility. user may do the same themselves)
 | 
			
		||||
    // FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window.
 | 
			
		||||
    if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiViewportP* viewport = window->WasActive ? window->Viewport : (ImGuiViewportP*)GetMainViewport(); // FIXME-VIEWPORT: What may be our reference viewport?
 | 
			
		||||
        SetNextWindowPos(viewport->GetMainRect().GetCenter(), ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
 | 
			
		||||
        SetNextWindowPos(viewport->GetMainRect().GetCenter(), ImGuiCond_FirstUseEver, ImVec2(0.5f, 0.5f));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoDocking;
 | 
			
		||||
    flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoDocking;
 | 
			
		||||
    const bool is_open = Begin(name, p_open, flags);
 | 
			
		||||
    if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -2922,6 +2922,10 @@ static void ShowDemoWindowPopups()
 | 
			
		||||
        if (ImGui::Button("Delete.."))
 | 
			
		||||
            ImGui::OpenPopup("Delete?");
 | 
			
		||||
 | 
			
		||||
        // Always center this window when appearing
 | 
			
		||||
        ImVec2 center(ImGui::GetIO().DisplaySize.x * 0.5f, ImGui::GetIO().DisplaySize.y * 0.5f);
 | 
			
		||||
        ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
 | 
			
		||||
 | 
			
		||||
        if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
 | 
			
		||||
        {
 | 
			
		||||
            ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user