@ -14469,6 +14469,11 @@ static void ImGui::WindowSelectViewport(ImGuiWindow* window)
// Code explicitly request a viewport
window - > Viewport = ( ImGuiViewportP * ) FindViewportByID ( g . NextWindowData . ViewportId ) ;
window - > ViewportId = g . NextWindowData . ViewportId ; // Store ID even if Viewport isn't resolved yet.
if ( window - > Viewport & & ( window - > Flags & ImGuiWindowFlags_DockNodeHost ) ! = 0 & & window - > Viewport - > Window ! = NULL )
{
window - > Viewport - > Window = window ;
window - > Viewport - > ID = window - > ViewportId = window - > ID ; // Overwrite ID (always owned by node)
}
lock_viewport = true ;
}
else if ( ( flags & ImGuiWindowFlags_ChildWindow ) | | ( flags & ImGuiWindowFlags_ChildMenu ) )
@ -15919,14 +15924,7 @@ static void ImGui::DockNodeRemoveWindow(ImGuiDockNode* node, ImGuiWindow* window
if ( node - > Windows . Size = = 1 & & ! node - > IsCentralNode ( ) & & node - > HostWindow )
{
ImGuiWindow * remaining_window = node - > Windows [ 0 ] ;
if ( node - > HostWindow - > ViewportOwned & & node - > IsRootNode ( ) )
{
// Transfer viewport back to the remaining loose window
IMGUI_DEBUG_LOG_VIEWPORT ( " [viewport] Node %08X transfer Viewport %08X=>%08X for Window '%s' \n " , node - > ID , node - > HostWindow - > Viewport - > ID , remaining_window - > ID , remaining_window - > Name ) ;
IM_ASSERT ( node - > HostWindow - > Viewport - > Window = = node - > HostWindow ) ;
node - > HostWindow - > Viewport - > Window = remaining_window ;
node - > HostWindow - > Viewport - > ID = remaining_window - > ID ;
}
// Note: we used to transport viewport ownership here.
remaining_window - > Collapsed = node - > HostWindow - > Collapsed ;
}
@ -16262,6 +16260,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node)
single_window - > ViewportId = node - > HostWindow - > ViewportId ;
if ( node - > HostWindow - > ViewportOwned )
{
single_window - > Viewport - > ID = single_window - > ID ;
single_window - > Viewport - > Window = single_window ;
single_window - > ViewportOwned = true ;
}