From 4c9bd858c70ea50d3deb210de491311074813ee9 Mon Sep 17 00:00:00 2001 From: Kevin Lam Date: Sun, 24 Aug 2025 17:48:11 -0500 Subject: [PATCH] Fix tree to update size with scrollbars disabled When scrollbars are disabled, tree size is dependant on item sizes, so this adds missing checks for when to resize. The side effect of the bug was that scrollbars could incorrectly appear when items change at runtime. --- scene/gui/tree.cpp | 12 ++++++++++++ scene/gui/tree.h | 1 + 2 files changed, 13 insertions(+) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 7d6ca962083..550a105680c 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -150,6 +150,7 @@ void TreeItem::_change_tree(Tree *p_tree) { tree->edited_item = nullptr; tree->pressing_for_editor = false; } + tree->update_min_size_for_item_change(); tree->queue_accessibility_update(); tree->queue_redraw(); } @@ -880,6 +881,7 @@ TreeItem *TreeItem::create_child(int p_index) { TreeItem *ti = memnew(TreeItem(tree)); if (tree) { ti->cells.resize(tree->columns.size()); + tree->update_min_size_for_item_change(); tree->queue_accessibility_update(); tree->queue_redraw(); } @@ -5199,6 +5201,7 @@ void Tree::item_changed(int p_column, TreeItem *p_item) { } p_item->accessibility_row_dirty = true; } + update_min_size_for_item_change(); queue_accessibility_update(); queue_redraw(); } @@ -5252,6 +5255,14 @@ void Tree::item_deselected(int p_column, TreeItem *p_item) { queue_redraw(); } +void Tree::update_min_size_for_item_change() { + // Only need to update when any scroll bar is disabled because that's the only time item size + // affects tree size. + if (!h_scroll_enabled || !v_scroll_enabled) { + update_minimum_size(); + } +} + void Tree::set_select_mode(SelectMode p_mode) { select_mode = p_mode; } @@ -5586,6 +5597,7 @@ void Tree::set_columns(int p_columns) { selected_col = p_columns - 1; selected_button = -1; } + update_min_size_for_item_change(); queue_accessibility_update(); queue_redraw(); } diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 6361c612ba0..625c4c8487a 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -570,6 +570,7 @@ private: void item_changed(int p_column, TreeItem *p_item); void item_selected(int p_column, TreeItem *p_item); void item_deselected(int p_column, TreeItem *p_item); + void update_min_size_for_item_change(); void propagate_set_columns(TreeItem *p_item);