MCPcopy Create free account
hub / github.com/Aegel5/SimpleSwitcher / DockNodeRemoveWindow

Method DockNodeRemoveWindow

imgui_tiny_app/imgui/imgui.cpp:18655–18722  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18653}
18654
18655static void ImGui::DockNodeRemoveWindow(ImGuiDockNode* node, ImGuiWindow* window, ImGuiID save_dock_id)
18656{
18657 ImGuiContext& g = *GImGui;
18658 IM_ASSERT(window->DockNode == node);
18659 //IM_ASSERT(window->RootWindowDockTree == node->HostWindow);
18660 //IM_ASSERT(window->LastFrameActive < g.FrameCount); // We may call this from Begin()
18661 IM_ASSERT(save_dock_id == 0 || save_dock_id == node->ID);
18662 IMGUI_DEBUG_LOG_DOCKING("[docking] DockNodeRemoveWindow node 0x%08X window '%s'\n", node->ID, window->Name);
18663
18664 window->DockNode = NULL;
18665 window->DockIsActive = window->DockTabWantClose = false;
18666 window->DockId = save_dock_id;
18667 window->Flags &= ~ImGuiWindowFlags_ChildWindow;
18668 if (window->ParentWindow)
18669 window->ParentWindow->DC.ChildWindows.find_erase(window);
18670 UpdateWindowParentAndRootLinks(window, window->Flags, NULL); // Update immediately
18671
18672 if (node->HostWindow && node->HostWindow->ViewportOwned)
18673 {
18674 // When undocking from a user interaction this will always run in NewFrame() and have not much effect.
18675 // But mid-frame, if we clear viewport we need to mark window as hidden as well.
18676 window->Viewport = NULL;
18677 window->ViewportId = 0;
18678 window->ViewportOwned = false;
18679 window->Hidden = true;
18680 }
18681
18682 // Remove window
18683 bool erased = false;
18684 for (int n = 0; n < node->Windows.Size; n++)
18685 if (node->Windows[n] == window)
18686 {
18687 node->Windows.erase(node->Windows.Data + n);
18688 erased = true;
18689 break;
18690 }
18691 if (!erased)
18692 IM_ASSERT(erased);
18693 if (node->VisibleWindow == window)
18694 node->VisibleWindow = NULL;
18695
18696 // Remove tab and possibly tab bar
18697 node->WantHiddenTabBarUpdate = true;
18698 if (node->TabBar)
18699 {
18700 TabBarRemoveTab(node->TabBar, window->TabId);
18701 const int tab_count_threshold_for_tab_bar = node->IsCentralNode() ? 1 : 2;
18702 if (node->Windows.Size < tab_count_threshold_for_tab_bar)
18703 DockNodeRemoveTabBar(node);
18704 }
18705
18706 if (node->Windows.Size == 0 && !node->IsCentralNode() && !node->IsDockSpace() && window->DockId != node->ID)
18707 {
18708 // Automatic dock node delete themselves if they are not holding at least one tab
18709 DockContextRemoveNode(&g, node, true);
18710 return;
18711 }
18712

Callers

nothing calls this directly

Calls 1

eraseMethod · 0.80

Tested by

no test coverage detected