TreeNode, Tables: fixed ImGuiTreeNodeFlags_DrawLinesXXX feature when TreePop() is called in table: in no column or at top of row. (#2920)
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index 5ab36ed..1e67668 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -55,8 +55,8 @@
 - Windows: loosened code to allow hovering of resize grips, borders, and table
   borders while hovering a sibling child window, so that the code in master matches
   one in docking (they accidentally diverged). (#8554)
-- TreeNode: added flags to draw tree hierarchy outlines linking parent
-  and tree nodes: (#2920)
+- TreeNode: added experimental flags to draw tree hierarchy outlines linking
+  parent and tree nodes: (#2920)
   - ImGuiTreeNodeFlags_DrawLinesNone: No lines drawn (default value in style.TreeLinesFlags).
   - ImGuiTreeNodeFlags_DrawLinesFull: Horizontal lines to child nodes. Vertical line drawn down to TreePop() position: cover full contents.
   - ImGuiTreeNodeFlags_DrawLinesToNodes: Horizontal lines to child nodes. Vertical line drawn down to bottom-most child node.
@@ -69,6 +69,11 @@
       nodes in unusual ways, using indent to create tree-looking structures, etc.)
       and the feature may not accurately represent them in every cases.
     - The feature adds a little cost as extra data needs to be stored.
+      (ImGuiTreeNodeFlags_DrawLinesToNodes is slower than ImGuiTreeNodeFlags_DrawLinesFull
+      which may be meaningful on very large trees, as it needs to record bottom-most
+      Y position even for clipped nodes).
+    - The feature is unlikely to ever work properly when using a coarse clipper
+      such as ImGuiListClipper.
 - TreeNode: fixed incorrect clipping of arrow/bullet when using ImGuiTreeNodeFlags_SpanAllColumns.
 - Nav: fixed assertion when holding gamepad FaceLeft/West button to open
   CTRL+Tab windowing + pressing a keyboard key. (#8525)
diff --git a/imgui_tables.cpp b/imgui_tables.cpp
index 6d4d673..b8b8693 100644
--- a/imgui_tables.cpp
+++ b/imgui_tables.cpp
@@ -2494,7 +2494,7 @@
     ImGuiTable* table = g.CurrentTable;
 
     // Optimization: avoid PopClipRect() + SetCurrentChannel()
-    if (table->Flags & ImGuiTableFlags_NoClip)
+    if ((table->Flags & ImGuiTableFlags_NoClip) || (table->CurrentColumn == -1)) // Calling TreePop() after TableNextRow() is supported.
         return;
     ImGuiWindow* window = g.CurrentWindow;
     const ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 42741b2..6933fdc 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -6919,7 +6919,10 @@
             float y2 = data->DrawLinesToNodesY2;
             if (data->TreeFlags & ImGuiTreeNodeFlags_DrawLinesFull)
             {
-                float y2_full = ImTrunc(window->DC.CursorPos.y - g.Style.ItemSpacing.y - g.FontSize * 0.5f);
+                float y2_full = window->DC.CursorPos.y;
+                if (g.CurrentTable)
+                    y2_full = ImMax(g.CurrentTable->RowPosY2, y2_full);
+                y2_full = ImTrunc(y2_full - g.Style.ItemSpacing.y - g.FontSize * 0.5f);
                 if (y2 + g.Style.ItemSpacing.y < y2_full) // FIXME: threshold to use ToNodes Y2 instead of Full Y2 when close by ItemSpacing.y
                     y2 = y2_full;
             }