Преглед изворни кода

Docking: fix 58f5092 (#4310)

If we clear _ChildWindow flag we must remove it from here otherwise render loop will fail.
ocornut пре 4 година
родитељ
комит
0eb45a0577
1 измењених фајлова са 7 додато и 2 уклоњено
  1. 7 2
      imgui.cpp

+ 7 - 2
imgui.cpp

@@ -13112,8 +13112,11 @@ void ImGui::DockContextProcessUndockNode(ImGuiContext* ctx, ImGuiDockNode* node)
         DockSettingsRenameNodeReferences(node->ID, new_node->ID);
         for (int n = 0; n < new_node->Windows.Size; n++)
         {
-            new_node->Windows[n]->Flags &= ~ImGuiWindowFlags_ChildWindow;
-            UpdateWindowParentAndRootLinks(new_node->Windows[n], new_node->Windows[n]->Flags, NULL);
+            ImGuiWindow* window = new_node->Windows[n];
+            window->Flags &= ~ImGuiWindowFlags_ChildWindow;
+            if (window->ParentWindow)
+                window->ParentWindow->DC.ChildWindows.find_erase(window);
+            UpdateWindowParentAndRootLinks(window, window->Flags, NULL);
         }
         node = new_node;
     }
@@ -13297,6 +13300,8 @@ static void ImGui::DockNodeRemoveWindow(ImGuiDockNode* node, ImGuiWindow* window
     window->DockIsActive = window->DockTabWantClose = false;
     window->DockId = save_dock_id;
     window->Flags &= ~ImGuiWindowFlags_ChildWindow;
+    if (window->ParentWindow)
+        window->ParentWindow->DC.ChildWindows.find_erase(window);
     UpdateWindowParentAndRootLinks(window, window->Flags, NULL); // Update immediately
 
     // Remove window