diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-06-24 11:14:06 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-06-24 11:14:06 +0200 |
commit | bf20231140da1f52c15807f46c4b0c6ef1da0d60 (patch) | |
tree | 02c55e9d0e3f17b07fce1e1478ef9ff25ecfda69 | |
parent | 6882a948b6393dcefa5dcd6fd3012dd2e0cb0486 (diff) | |
parent | d86e02580c9211b7d7c2a48614649ec64c1fecec (diff) | |
download | redot-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.cpp | 13 |
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; |