diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-28 12:31:38 +0200 |
|---|---|---|
| committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-28 12:31:38 +0200 |
| commit | 17da2c5b53ffd34d15d90286e9f73dabbbe23ec4 (patch) | |
| tree | c4739f2960382461f29db9ba693b75af6ca9bd87 /scene/gui | |
| parent | b6c941fe9cdee91e2cb6ba2d8ceb95b21436bba8 (diff) | |
| parent | c3fc87964f534d5064a5d94dac7c7dc623867aa0 (diff) | |
| download | redot-engine-17da2c5b53ffd34d15d90286e9f73dabbbe23ec4.tar.gz | |
Merge pull request #83963 from YeldhamDev/try_active_tabs_first
Fix disabled tabs being selected when removing the current one
Diffstat (limited to 'scene/gui')
| -rw-r--r-- | scene/gui/tab_bar.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/scene/gui/tab_bar.cpp b/scene/gui/tab_bar.cpp index d8abb36c8d..777ca96cc4 100644 --- a/scene/gui/tab_bar.cpp +++ b/scene/gui/tab_bar.cpp @@ -675,7 +675,7 @@ bool TabBar::select_previous_available() { if (target_tab < 0) { target_tab += get_tab_count(); } - if (!is_tab_disabled(target_tab)) { + if (!is_tab_disabled(target_tab) && !is_tab_hidden(target_tab)) { set_current_tab(target_tab); return true; } @@ -687,7 +687,7 @@ bool TabBar::select_next_available() { const int offset_end = (get_tab_count() - get_current_tab()); for (int i = 1; i < offset_end; i++) { int target_tab = (get_current_tab() + i) % get_tab_count(); - if (!is_tab_disabled(target_tab)) { + if (!is_tab_disabled(target_tab) && !is_tab_hidden(target_tab)) { set_current_tab(target_tab); return true; } @@ -1100,6 +1100,23 @@ void TabBar::remove_tab(int p_idx) { max_drawn_tab = 0; previous = 0; } else { + // Try to change to a valid tab if possible (without firing the `tab_selected` signal). + for (int i = current; i < tabs.size(); i++) { + if (!is_tab_disabled(i) && !is_tab_hidden(i)) { + current = i; + break; + } + } + // If nothing, try backwards. + if (is_tab_disabled(current) || is_tab_hidden(current)) { + for (int i = current - 1; i >= 0; i--) { + if (!is_tab_disabled(i) && !is_tab_hidden(i)) { + current = i; + break; + } + } + } + offset = MIN(offset, tabs.size() - 1); max_drawn_tab = MIN(max_drawn_tab, tabs.size() - 1); |
