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.
This commit is contained in:
Kevin Lam 2025-08-24 17:48:11 -05:00
parent 3defc856b0
commit 4c9bd858c7
2 changed files with 13 additions and 0 deletions

View file

@ -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();
}

View file

@ -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);