@ -3823,9 +3823,9 @@ void ImGui::NewFrame()
// Perform simple check: error if Docking or Viewport are enabled _exactly_ on frame 1 (instead of frame 0 or later), which is a common error leading to loss of .ini data.
g . ConfigFlagsLastFrame = g . ConfigFlagsCurrFrame ;
if ( g . FrameCount = = 1 & & ( g . IO . ConfigFlags & ImGuiConfigFlags_DockingEnable ) & & ( g . ConfigFlagsLastFrame & ImGuiConfigFlags_DockingEnable ) = = 0 )
IM_ASSERT ( 0 & & " Please DockingEnable before the first call to NewFrame()! Otherwise you will lose your .ini settings!" ) ;
IM_ASSERT ( 0 & & " Please set DockingEnable before the first call to NewFrame()! Otherwise you will lose your .ini settings!" ) ;
if ( g . FrameCount = = 1 & & ( g . IO . ConfigFlags & ImGuiConfigFlags_ViewportsEnable ) & & ( g . ConfigFlagsLastFrame & ImGuiConfigFlags_ViewportsEnable ) = = 0 )
IM_ASSERT ( 0 & & " Please ViewportEnable before the first call to NewFrame()! Otherwise you will lose your .ini settings!" ) ;
IM_ASSERT ( 0 & & " Please set Viewports Enable before the first call to NewFrame()! Otherwise you will lose your .ini settings!" ) ;
// Perform simple checks: multi-viewport and platform windows support
if ( g . IO . ConfigFlags & ImGuiConfigFlags_ViewportsEnable )
@ -11190,7 +11190,6 @@ namespace ImGui
{
// ImGuiDockContext
static ImGuiDockNode * DockContextAddNode ( ImGuiContext * ctx , ImGuiID id ) ;
static ImGuiID DockContextGenNodeID ( ImGuiContext * ctx ) ;
static void DockContextRemoveNode ( ImGuiContext * ctx , ImGuiDockNode * node , bool merge_sibling_into_parent_node ) ;
static void DockContextQueueNotifyRemovedNode ( ImGuiContext * ctx , ImGuiDockNode * node ) ;
static void DockContextProcessDock ( ImGuiContext * ctx , ImGuiDockRequest * req ) ;
@ -11396,7 +11395,7 @@ static ImGuiDockNode* ImGui::DockContextFindNodeByID(ImGuiContext* ctx, ImGuiID
return ( ImGuiDockNode * ) ctx - > DockContext - > Nodes . GetVoidPtr ( id ) ;
}
static ImGuiID ImGui : : DockContextGenNodeID ( ImGuiContext * ctx )
ImGuiID ImGui : : DockContextGenNodeID ( ImGuiContext * ctx )
{
// Generate an ID for new node (the exact ID value doesn't matter as long as it is not already used)
// FIXME-OPT FIXME-DOCKING: This is suboptimal, even if the node count is small enough not to be a worry. We should poke in ctx->Nodes to find a suitable ID faster.
@ -11413,6 +11412,8 @@ static ImGuiDockNode* ImGui::DockContextAddNode(ImGuiContext* ctx, ImGuiID id)
id = DockContextGenNodeID ( ctx ) ;
else
IM_ASSERT ( DockContextFindNodeByID ( ctx , id ) = = NULL ) ;
// We don't set node->LastFrameAlive on construction. Nodes are always created at all time to reflect .ini settings!
IMGUI_DEBUG_LOG_DOCKING ( " DockContextAddNode 0x%08X \n " , id ) ;
ImGuiDockNode * node = IM_NEW ( ImGuiDockNode ) ( id ) ;
ctx - > DockContext - > Nodes . SetVoidPtr ( node - > ID , node ) ;
@ -11917,8 +11918,8 @@ static void ImGui::DockNodeAddWindow(ImGuiDockNode* node, ImGuiWindow* window, b
window - > DockIsActive = ( node - > Windows . Size > 1 ) ;
window - > DockTabWantClose = false ;
// If 2+ windows appeared on the same frame, creating a new DockNode+TabBar from the second window,
// then we need to hide the first one after the fact otherwise it would be visible as a standalone window for one frame.
// If more than 2 windows appeared on the same frame, we'll create a new hosting DockNode from the point of the second window submission.
// Then we need to hide the first window (after its been output) otherwise it would be visible as a standalone window for one frame.
if ( node - > HostWindow = = NULL & & node - > Windows . Size = = 2 & & node - > Windows [ 0 ] - > WasActive = = false )
{
node - > Windows [ 0 ] - > Hidden = true ;
@ -12464,6 +12465,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node)
if ( node - > IsRootNode ( ) & & ( g . MovingWindow = = NULL | | g . MovingWindow - > RootWindow ! = host_window ) )
BeginAsDockableDragDropTarget ( host_window ) ;
// We update this after DockNodeUpdateTabBar()
node - > LastFrameActive = g . FrameCount ;
// Recurse into children
@ -14087,8 +14089,7 @@ void ImGui::BeginDocked(ImGuiWindow* window, bool* p_open)
{
node = DockContextAddNode ( ctx , window - > DockId ) ;
node - > AuthorityForPos = node - > AuthorityForSize = node - > AuthorityForViewport = ImGuiDataAuthority_Window ;
if ( auto_dock_node )
node - > LastFrameAlive = g . FrameCount ;
node - > LastFrameAlive = g . FrameCount ;
}
// If the node just turned visible, it doesn't have a Size assigned by DockNodeTreeUpdatePosSize() yet,
@ -14913,6 +14914,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
IM_ASSERT ( node - > ChildNodes [ 1 ] = = NULL | | node - > ChildNodes [ 1 ] - > ParentNode = = node ) ;
ImGui : : BulletText ( " Pos (%.0f,%.0f), Size (%.0f, %.0f) Ref (%.0f, %.0f) " ,
node - > Pos . x , node - > Pos . y , node - > Size . x , node - > Size . y , node - > SizeRef . x , node - > SizeRef . y ) ;
NodeWindow ( node - > HostWindow , " HostWindow " ) ;
NodeWindow ( node - > VisibleWindow , " VisibleWindow " ) ;
ImGui : : BulletText ( " SelectedTabID: 0x%08X, LastFocusedNodeID: 0x%08X " , node - > SelectedTabID , node - > LastFocusedNodeID ) ;
ImGui : : BulletText ( " Misc:%s%s%s%s " , node - > IsDockSpace ( ) ? " IsDockSpace " : " " , node - > IsCentralNode ( ) ? " IsCentralNode " : " " , ( g . FrameCount - node - > LastFrameAlive < 2 ) ? " IsAlive " : " " , ( g . FrameCount - node - > LastFrameActive < 2 ) ? " IsActive " : " " ) ;