diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index a668069a8..c689dcf1f 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -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) diff --git a/imgui.cpp b/imgui.cpp index 7bd03cf4b..8320d9af7 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -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.