Begin: WIP consistent Begin/End behavior, docking bits
diff --git a/imgui.cpp b/imgui.cpp index 1ffd0e5..5ed8798 100644 --- a/imgui.cpp +++ b/imgui.cpp
@@ -13270,8 +13270,10 @@ window_flags |= ImGuiWindowFlags_NoTitleBar; PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); - Begin(window_label, NULL, window_flags); + bool ret = Begin(window_label, NULL, window_flags); PopStyleVar(); + IM_UNUSED(ret); + IM_ASSERT(ret); // FIXME-NEWBEGIN beginned_into_host_window = true; node->HostWindow = host_window = g.CurrentWindow; @@ -13454,7 +13456,8 @@ return false; if (node->SharedFlags & ImGuiDockNodeFlags_KeepAliveOnly) return false; - Begin(node->HostWindow->Name); + if (!Begin(node->HostWindow->Name)) + return false; PushOverrideID(node->ID); bool ret = BeginTabBarEx(node->TabBar, node->TabBar->BarRect, node->TabBar->Flags, node); IM_ASSERT(ret); @@ -14541,10 +14544,12 @@ if (node->Windows.Size > 0 || node->IsSplitNode()) PushStyleColor(ImGuiCol_ChildBg, IM_COL32(0, 0, 0, 0)); PushStyleVar(ImGuiStyleVar_ChildBorderSize, 0.0f); - Begin(title, NULL, window_flags); + bool ret = Begin(title, NULL, window_flags); PopStyleVar(); if (node->Windows.Size > 0 || node->IsSplitNode()) PopStyleColor(); + if (!ret) + return; // FIXME-NEWBEGIN ImGuiWindow* host_window = g.CurrentWindow; host_window->DockNodeAsHost = node; @@ -14595,12 +14600,16 @@ PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); - Begin(label, NULL, host_window_flags); + bool ret = Begin(label, NULL, host_window_flags); PopStyleVar(3); - ImGuiID dockspace_id = GetID("DockSpace"); - DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags, window_class); - End(); + + // FIXME-NEWBEGIN: KeepAlive if not visible? + if (ret) + { + DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags, window_class); + End(); + } return dockspace_id; }
diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 535150a..9f75fe9 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp
@@ -7227,12 +7227,14 @@ // any change of dockspace/settings would lead to windows being stuck in limbo and never being visible. if (!opt_padding) ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); - ImGui::Begin("DockSpace Demo", p_open, window_flags); + bool ret = ImGui::Begin("DockSpace Demo", p_open, window_flags); + if (!opt_padding) ImGui::PopStyleVar(); - if (opt_fullscreen) ImGui::PopStyleVar(2); + if (!ret) + return; // FIXME-NEWBEGIN: KeepAlive? // DockSpace ImGuiIO& io = ImGui::GetIO();