diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 5ef7ce432..a907bf6bc 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -164,6 +164,8 @@ Docking+Viewports Branch: by docked windows. (#8983, #9064) - Docking: fixed crash loading certain form of invalid .ini settings (e.g. nodes referring to a missing parent, duplicate nodes id). (#9070) +- Docking: added io.ConfigDockingNoDockingOver helper config flag to prevent + merging windows into a same tab-bar. - Examples: - SDL2+DX11, SDL3+DX11, Win32+DX10, Win32+DX11: fixed one resource leak from the use of MakeWindowAssociation() in 1.92.4. (#9010, #4350) [@o-3-o] diff --git a/imgui.cpp b/imgui.cpp index 6369878cd..727ac1f9c 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1590,6 +1590,7 @@ ImGuiIO::ImGuiIO() // Docking options (when ImGuiConfigFlags_DockingEnable is set) ConfigDockingNoSplit = false; + ConfigDockingNoDockingOver = false; ConfigDockingWithShift = false; ConfigDockingAlwaysTabBar = false; ConfigDockingTransparentPayload = false; @@ -19653,6 +19654,8 @@ static void ImGui::DockNodePreviewDockSetup(ImGuiWindow* host_window, ImGuiDockN data->IsCenterAvailable = true; if (is_outer_docking) data->IsCenterAvailable = false; + else if (g.IO.ConfigDockingNoDockingOver) + data->IsCenterAvailable = false; else if (dst_node_flags & ImGuiDockNodeFlags_NoDockingOverMe) data->IsCenterAvailable = false; else if (host_node && (dst_node_flags & ImGuiDockNodeFlags_NoDockingOverCentralNode) && host_node->IsCentralNode()) diff --git a/imgui.h b/imgui.h index 749f2fac2..2b3d10160 100644 --- a/imgui.h +++ b/imgui.h @@ -2493,6 +2493,7 @@ struct ImGuiIO // Docking options (when ImGuiConfigFlags_DockingEnable is set) bool ConfigDockingNoSplit; // = false // Simplified docking mode: disable window splitting, so docking is limited to merging multiple windows together into tab-bars. + bool ConfigDockingNoDockingOver; // = false // Simplified docking mode: disable window merging into a same tab-bar, so docking is limited to splitting windows. bool ConfigDockingWithShift; // = false // Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) bool ConfigDockingAlwaysTabBar; // = false // [BETA] [FIXME: This currently creates regression with auto-sizing and general overhead] Make every single floating window display within a docking node. bool ConfigDockingTransparentPayload;// = false // [BETA] Make window or viewport transparent when docking and only display docking boxes on the target viewport. Useful if rendering of multiple viewport cannot be synced. Best used with ConfigViewportsNoAutoMerge. diff --git a/imgui_demo.cpp b/imgui_demo.cpp index e9b12c6c4..61b4f1527 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -533,6 +533,8 @@ void ImGui::ShowDemoWindow(bool* p_open) ImGui::Indent(); ImGui::Checkbox("io.ConfigDockingNoSplit", &io.ConfigDockingNoSplit); ImGui::SameLine(); HelpMarker("Simplified docking mode: disable window splitting, so docking is limited to merging multiple windows together into tab-bars."); + ImGui::Checkbox("io.ConfigDockingNoDockingOver", &io.ConfigDockingNoDockingOver); + ImGui::SameLine(); HelpMarker("Simplified docking mode: disable window merging into a same tab-bar, so docking is limited to splitting windows."); ImGui::Checkbox("io.ConfigDockingWithShift", &io.ConfigDockingWithShift); ImGui::SameLine(); HelpMarker("Enable docking when holding Shift only (allow to drop in wider space, reduce visual noise)"); ImGui::Checkbox("io.ConfigDockingAlwaysTabBar", &io.ConfigDockingAlwaysTabBar); @@ -8313,6 +8315,7 @@ void ImGui::ShowAboutWindow(bool* p_open) if (io.ConfigViewportsNoDecoration) ImGui::Text("io.ConfigViewportsNoDecoration"); if (io.ConfigViewportsNoDefaultParent) ImGui::Text("io.ConfigViewportsNoDefaultParent"); if (io.ConfigDockingNoSplit) ImGui::Text("io.ConfigDockingNoSplit"); + if (io.ConfigDockingNoDockingOver) ImGui::Text("io.ConfigDockingNoDockingOver"); if (io.ConfigDockingWithShift) ImGui::Text("io.ConfigDockingWithShift"); if (io.ConfigDockingAlwaysTabBar) ImGui::Text("io.ConfigDockingAlwaysTabBar"); if (io.ConfigDockingTransparentPayload) ImGui::Text("io.ConfigDockingTransparentPayload");