@ -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 "  :  " " ) ;