2
0
Эх сурвалжийг харах

Fix getting outdated tab controls

Rindbee 3 жил өмнө
parent
commit
c47ac20620

+ 7 - 2
scene/gui/tab_container.cpp

@@ -312,7 +312,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) {
+		if (!control || control->is_set_as_top_level() || control == tab_bar || control == child_removing) {
 			continue;
 		}
 
@@ -549,7 +549,12 @@ void TabContainer::remove_child_notify(Node *p_child) {
 		return;
 	}
 
-	tab_bar->remove_tab(get_tab_idx_from_control(c));
+	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;
+	tab_bar->remove_tab(idx);
+	child_removing = nullptr;
 
 	_update_margins();
 	if (get_tab_count() == 0) {

+ 1 - 0
scene/gui/tab_container.h

@@ -46,6 +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;
 
 	int _get_top_margin() const;
 	Vector<Control *> _get_tab_controls() const;