summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-06-24 11:14:06 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-06-24 11:14:06 +0200
commitbf20231140da1f52c15807f46c4b0c6ef1da0d60 (patch)
tree02c55e9d0e3f17b07fce1e1478ef9ff25ecfda69
parent6882a948b6393dcefa5dcd6fd3012dd2e0cb0486 (diff)
parentd86e02580c9211b7d7c2a48614649ec64c1fecec (diff)
downloadredot-engine-bf20231140da1f52c15807f46c4b0c6ef1da0d60.tar.gz
Merge pull request #93179 from TheSofox/tree-nav-crash
Fix engine crashing when using Down Arrow selection on Tree with no selection
-rw-r--r--scene/gui/tree.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index d8059dc170..b0dfdacad0 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -3354,15 +3354,16 @@ void Tree::_go_up() {
prev = selected_item->get_prev_visible();
}
+ int col = MAX(selected_col, 0);
+
if (select_mode == SELECT_MULTI) {
if (!prev) {
return;
}
- select_single_item(prev, get_root(), selected_col);
+ select_single_item(prev, get_root(), col);
queue_redraw();
} else {
- int col = selected_col < 0 ? 0 : selected_col;
while (prev && !prev->cells[col].selectable) {
prev = prev->get_prev_visible();
}
@@ -3386,16 +3387,16 @@ void Tree::_go_down() {
next = selected_item->get_next_visible();
}
+ int col = MAX(selected_col, 0);
+
if (select_mode == SELECT_MULTI) {
if (!next) {
return;
}
- select_single_item(next, get_root(), selected_col);
+ select_single_item(next, get_root(), col);
queue_redraw();
} else {
- int col = selected_col < 0 ? 0 : selected_col;
-
while (next && !next->cells[col].selectable) {
next = next->get_next_visible();
}
@@ -4471,7 +4472,7 @@ TreeItem *Tree::get_last_item() const {
while (last) {
if (last->next) {
last = last->next;
- } else if (last->first_child) {
+ } else if (last->first_child && !last->collapsed) {
last = last->first_child;
} else {
break;