diff options
author | Michael Alexsander <michaelalexsander@protonmail.com> | 2022-02-14 01:58:17 -0300 |
---|---|---|
committer | Michael Alexsander <michaelalexsander@protonmail.com> | 2022-02-14 01:58:17 -0300 |
commit | 2b4d417e994290ba0cf762eff8b78e6377588aaa (patch) | |
tree | 855e73e110d02224aa9024a6023a41b2a1345474 /scene | |
parent | d3a6b6daaab4c8dfb7bdf35cc2fe2145ae6c22a1 (diff) |
Fix crash when removing tabs from `TabBar`
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/tab_bar.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/scene/gui/tab_bar.cpp b/scene/gui/tab_bar.cpp index b1baacd887..607031bee6 100644 --- a/scene/gui/tab_bar.cpp +++ b/scene/gui/tab_bar.cpp @@ -524,13 +524,14 @@ void TabBar::set_tab_count(int p_count) { offset = MIN(offset, p_count - 1); max_drawn_tab = MIN(max_drawn_tab, p_count - 1); current = MIN(current, p_count - 1); - } - _update_cache(); - _ensure_no_over_offset(); - if (scroll_to_selected) { - ensure_tab_visible(current); + _update_cache(); + _ensure_no_over_offset(); + if (scroll_to_selected) { + ensure_tab_visible(current); + } } + update(); update_minimum_size(); notify_property_list_changed(); @@ -961,7 +962,6 @@ void TabBar::clear_tabs() { current = 0; previous = 0; - _update_cache(); update(); update_minimum_size(); notify_property_list_changed(); @@ -975,18 +975,21 @@ void TabBar::remove_tab(int p_idx) { } if (current < 0) { + offset = 0; + max_drawn_tab = 0; current = 0; previous = 0; - } - if (current >= tabs.size()) { - current = tabs.size() - 1; - } + } else { + offset = MIN(offset, tabs.size() - 1); + max_drawn_tab = MIN(max_drawn_tab, tabs.size() - 1); - _update_cache(); - _ensure_no_over_offset(); - if (scroll_to_selected && !tabs.is_empty()) { - ensure_tab_visible(current); + _update_cache(); + _ensure_no_over_offset(); + if (scroll_to_selected && !tabs.is_empty()) { + ensure_tab_visible(current); + } } + update(); update_minimum_size(); notify_property_list_changed(); |