Fix problems with tab_changed signal when removing multiple tabs at once

This commit is contained in:
Michael Alexsander 2022-10-27 01:22:06 -03:00
parent 2b505b74b9
commit fb8588e68e
2 changed files with 5 additions and 5 deletions

View file

@ -345,7 +345,7 @@ Vector<Control *> TabContainer::_get_tab_controls() const {
Vector<Control *> controls;
for (int i = 0; i < get_child_count(); i++) {
Control *control = Object::cast_to<Control>(get_child(i));
if (!control || control->is_set_as_top_level() || control == tab_bar || control == child_removing) {
if (!control || control->is_set_as_top_level() || control == tab_bar || children_removing.has(control)) {
continue;
}
@ -584,10 +584,10 @@ void TabContainer::remove_child_notify(Node *p_child) {
int idx = get_tab_idx_from_control(c);
// Before this, the tab control has not changed; after this, the tab control has changed.
child_removing = p_child;
// As the child hasn't been removed yet, keep track of it so when the "tab_changed" signal is fired it can be ignored.
children_removing.push_back(c);
tab_bar->remove_tab(idx);
child_removing = nullptr;
children_removing.erase(c);
_update_margins();
if (get_tab_count() == 0) {

View file

@ -46,7 +46,7 @@ class TabContainer : public Container {
bool drag_to_rearrange_enabled = false;
bool use_hidden_tabs_for_min_size = false;
bool theme_changing = false;
Node *child_removing = nullptr;
Vector<Control *> children_removing;
struct ThemeCache {
int side_margin = 0;