Viewports, Docking: Fixed a bug where closing a viewport using OS facilities would erroneously close all windows located in the viewport. (#8887)

This commit is contained in:
ocornut
2025-08-20 19:09:45 +02:00
parent 03e39ca7f5
commit a28cb615ff
2 changed files with 13 additions and 5 deletions

View File

@@ -70,6 +70,12 @@ Changes:
- Backends: Allegro5: Fixed missing support for ImGuiKey_PrintScreen
under Windows, as raw Allegro 5 does not receive it.
Docking+Viewports Branch:
- Fixed a bug where closing a viewport using OS facility (e.g. ALT+F4, Close Button)
would erroneously close all windows located in the viewport, even ones docked
into nested dockspaces. Only top-most windows should be closed. (#8887) [@lailoken]
-----------------------------------------------------------------------
VERSION 1.92.2 (Released 2025-08-11)

View File

@@ -8373,12 +8373,14 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
NavInitWindow(window, false); // <-- this is in the way for us to be able to defer and sort reappearing FocusWindow() calls
// Close requested by platform window (apply to all windows in this viewport)
// FIXME: Investigate removing the 'window->Viewport != GetMainViewport()' test, which seems superfluous.
if (p_open != NULL && window->Viewport->PlatformRequestClose && window->Viewport != GetMainViewport())
{
IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Window '%s' closed by PlatformRequestClose\n", window->Name);
*p_open = false;
g.NavWindowingToggleLayer = false; // Assume user mapped PlatformRequestClose on ALT-F4 so we disable ALT for menu toggle. False positive not an issue. // FIXME-NAV: Try removing.
}
if (window->DockNode == NULL || (window->DockNode->MergedFlags & ImGuiDockNodeFlags_DockSpace) == 0)
{
IMGUI_DEBUG_LOG_VIEWPORT("[viewport] Window '%s' closed by PlatformRequestClose\n", window->Name);
*p_open = false;
g.NavWindowingToggleLayer = false; // Assume user mapped PlatformRequestClose on ALT-F4 so we disable ALT for menu toggle. False positive not an issue. // FIXME-NAV: Try removing.
}
// Pressing CTRL+C copy window content into the clipboard
// [EXPERIMENTAL] Breaks on nested Begin/End pairs. We need to work that out and add better logging scope.