mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Comments, clarifying ClosePopupsOverWindow().
This commit is contained in:
		@@ -98,7 +98,7 @@ Calling the `ImGui::ShowDemoWindow()` function will create a demo window showcas
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
You should be able to build the examples from sources (tested on Windows/Mac/Linux). If you don't, let us know! If you want to have a quick look at some Dear ImGui features, you can download Windows binaries of the demo app here:
 | 
			
		||||
- [imgui-demo-binaries-20190715.zip](http://www.dearimgui.org/binaries/imgui-demo-binaries-20200412.zip) (Windows binaries, 1.76, built 2020/04/12, master branch) or [older demo binaries](http://www.dearimgui.org/binaries).
 | 
			
		||||
- [imgui-demo-binaries-20200412.zip](http://www.dearimgui.org/binaries/imgui-demo-binaries-20200412.zip) (Windows, 1.76, built 2020/04/12, master branch) or [older demo binaries](http://www.dearimgui.org/binaries).
 | 
			
		||||
 | 
			
		||||
The demo applications are not DPI aware so expect some blurriness on a 4K screen. For DPI awareness in your application, you can load/reload your font at different scale, and scale your style with `style.ScaleAllSizes()` (see [FAQ](https://www.dearimgui.org/faq)).
 | 
			
		||||
 | 
			
		||||
@@ -126,7 +126,7 @@ Some of the goals for 2020 are:
 | 
			
		||||
- Work on docking. (see [#2109](https://github.com/ocornut/imgui/issues/2109), in public [docking](https://github.com/ocornut/imgui/tree/docking) branch)
 | 
			
		||||
- Work on multiple viewports / multiple OS windows. (see [#1542](https://github.com/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut/imgui/tree/docking) branch looking for feedback)
 | 
			
		||||
- Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/imgui/issues/787))
 | 
			
		||||
- Work on new Tables API (to replace Columns). (see [#2957](https://github.com/ocornut/imgui/issues/2957))
 | 
			
		||||
- Work on new Tables API (to replace Columns). (see [#2957](https://github.com/ocornut/imgui/issues/2957), in public [tables](https://github.com/ocornut/imgui/tree/tables) branch looking for feedback)
 | 
			
		||||
- Work on automation and testing system, both to test the library and end-user apps. (see [#435](https://github.com/ocornut/imgui/issues/435))
 | 
			
		||||
- Make the examples look better, improve styles, improve font support, make the examples hi-DPI and multi-DPI aware.
 | 
			
		||||
 | 
			
		||||
@@ -145,7 +145,7 @@ Custom engine
 | 
			
		||||
 | 
			
		||||
### Support, Frequently Asked Questions (FAQ)
 | 
			
		||||
 | 
			
		||||
Most common questions will be answered by the [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md) page.
 | 
			
		||||
See: [Frequently Asked Questions (FAQ)](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md) where common questions are answered.
 | 
			
		||||
 | 
			
		||||
See: [Wiki](https://github.com/ocornut/imgui/wiki) for many links, references, articles.
 | 
			
		||||
 | 
			
		||||
@@ -161,7 +161,7 @@ Private support is available for paying business customers (E-mail: _contact @ d
 | 
			
		||||
 | 
			
		||||
We occasionally tag [Releases](https://github.com/ocornut/imgui/releases) but it is generally safe and recommended to sync to master/latest. The library is fairly stable and regressions tend to be fixed fast when reported.
 | 
			
		||||
 | 
			
		||||
You may also peak at the [Multi-Viewport](https://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109) features in the `docking` branch. Many projects are using this branch and it is kept in sync with master regularly.
 | 
			
		||||
Advanced users may want to use the `docking` branch with [Multi-Viewport](https://github.com/ocornut/imgui/issues/1542) and [Docking](https://github.com/ocornut/imgui/issues/2109) features. This branch is kept in sync with master regularly.
 | 
			
		||||
 | 
			
		||||
**Who uses Dear ImGui?**
 | 
			
		||||
 | 
			
		||||
@@ -220,7 +220,7 @@ Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT li
 | 
			
		||||
 | 
			
		||||
Embeds [stb_textedit.h, stb_truetype.h, stb_rect_pack.h](https://github.com/nothings/stb/) by Sean Barrett (public domain).
 | 
			
		||||
 | 
			
		||||
Inspiration, feedback, and testing for early versions: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. And everybody posting feedback, questions and patches on the GitHub.
 | 
			
		||||
Inspiration, feedback, and testing for early versions: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. Also thank you to everyone posting feedback, questions and patches on GitHub.
 | 
			
		||||
 | 
			
		||||
License
 | 
			
		||||
-------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6098,7 +6098,7 @@ void ImGui::BringWindowToDisplayFront(ImGuiWindow* window)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* current_front_window = g.Windows.back();
 | 
			
		||||
    if (current_front_window == window || current_front_window->RootWindow == window)
 | 
			
		||||
    if (current_front_window == window || current_front_window->RootWindow == window) // Cheap early out (could be better)
 | 
			
		||||
        return;
 | 
			
		||||
    for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the top-most window
 | 
			
		||||
        if (g.Windows[i] == window)
 | 
			
		||||
@@ -7696,13 +7696,14 @@ void ImGui::OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
 | 
			
		||||
// This function closes any popups that are over 'ref_window'.
 | 
			
		||||
void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    if (g.OpenPopupStack.Size == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
 | 
			
		||||
    // Don't close our own child popup windows.
 | 
			
		||||
    int popup_count_to_keep = 0;
 | 
			
		||||
    if (ref_window)
 | 
			
		||||
@@ -7717,13 +7718,20 @@ void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to
 | 
			
		||||
            if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow)
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
            // Trim the stack when popups are not direct descendant of the reference window (the reference window is often the NavWindow)
 | 
			
		||||
            bool popup_or_descendent_is_ref_window = false;
 | 
			
		||||
            for (int m = popup_count_to_keep; m < g.OpenPopupStack.Size && !popup_or_descendent_is_ref_window; m++)
 | 
			
		||||
                if (ImGuiWindow* popup_window = g.OpenPopupStack[m].Window)
 | 
			
		||||
            // Trim the stack unless the popup is a direct parent of the reference window (the reference window is often the NavWindow)
 | 
			
		||||
            // - With this stack of window, clicking/focusing Popup1 will close Popup2 and Popup3:
 | 
			
		||||
            //     Window -> Popup1 -> Popup2 -> Popup3
 | 
			
		||||
            // - Each popups may contain child windows, which is why we compare ->RootWindow!
 | 
			
		||||
            //     Window -> Popup1 -> Popup1_Child -> Popup2 -> Popup2_Child
 | 
			
		||||
            bool ref_window_is_descendent_of_popup = false;
 | 
			
		||||
            for (int n = popup_count_to_keep; n < g.OpenPopupStack.Size; n++)
 | 
			
		||||
                if (ImGuiWindow* popup_window = g.OpenPopupStack[n].Window)
 | 
			
		||||
                    if (popup_window->RootWindow == ref_window->RootWindow)
 | 
			
		||||
                        popup_or_descendent_is_ref_window = true;
 | 
			
		||||
            if (!popup_or_descendent_is_ref_window)
 | 
			
		||||
                    {
 | 
			
		||||
                        ref_window_is_descendent_of_popup = true;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
            if (!ref_window_is_descendent_of_popup)
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1127,10 +1127,10 @@ struct ImGuiContext
 | 
			
		||||
    ImGuiStorage            WindowsById;                        // Map window's ImGuiID to ImGuiWindow*
 | 
			
		||||
    int                     WindowsActiveCount;                 // Number of unique windows submitted by frame
 | 
			
		||||
    ImGuiWindow*            CurrentWindow;                      // Window being drawn into
 | 
			
		||||
    ImGuiWindow*            HoveredWindow;                      // Will catch mouse inputs
 | 
			
		||||
    ImGuiWindow*            HoveredRootWindow;                  // Will catch mouse inputs (for focus/move only)
 | 
			
		||||
    ImGuiWindow*            HoveredWindow;                      // Window the mouse is hovering. Will typically catch mouse inputs.
 | 
			
		||||
    ImGuiWindow*            HoveredRootWindow;                  // == HoveredWindow ? HoveredWindow->RootWindow : NULL, merely a shortcut to avoid null test in some situation.
 | 
			
		||||
    ImGuiWindow*            HoveredWindowUnderMovingWindow;     // Hovered window ignoring MovingWindow. Only set if MovingWindow is set.
 | 
			
		||||
    ImGuiWindow*            MovingWindow;                       // Track the window we clicked on (in order to preserve focus). The actually window that is moved is generally MovingWindow->RootWindow.
 | 
			
		||||
    ImGuiWindow*            MovingWindow;                       // Track the window we clicked on (in order to preserve focus). The actual window that is moved is generally MovingWindow->RootWindow.
 | 
			
		||||
    ImGuiWindow*            WheelingWindow;                     // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window.
 | 
			
		||||
    ImVec2                  WheelingWindowRefMousePos;
 | 
			
		||||
    float                   WheelingWindowTimer;
 | 
			
		||||
@@ -1632,7 +1632,7 @@ struct IMGUI_API ImGuiWindow
 | 
			
		||||
    ImDrawList*             DrawList;                           // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
 | 
			
		||||
    ImDrawList              DrawListInst;
 | 
			
		||||
    ImGuiWindow*            ParentWindow;                       // If we are a child _or_ popup window, this is pointing to our parent. Otherwise NULL.
 | 
			
		||||
    ImGuiWindow*            RootWindow;                         // Point to ourself or first ancestor that is not a child window.
 | 
			
		||||
    ImGuiWindow*            RootWindow;                         // Point to ourself or first ancestor that is not a child window == Top-level window.
 | 
			
		||||
    ImGuiWindow*            RootWindowForTitleBarHighlight;     // Point to ourself or first ancestor which will display TitleBgActive color when this window is active.
 | 
			
		||||
    ImGuiWindow*            RootWindowForNav;                   // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user