Browse Source

Merge pull request #90266 from akien-mga/scenetreeeditor-fix-treeitem-crash

SceneTreeEditor: Fix crash when TreeItem is removed before callback
Rémi Verschelde 1 year ago
parent
commit
655e93d584
2 changed files with 11 additions and 1 deletions
  1. 10 1
      editor/gui/scene_tree_editor.cpp
  2. 1 0
      editor/gui/scene_tree_editor.h

+ 10 - 1
editor/gui/scene_tree_editor.cpp

@@ -897,6 +897,14 @@ void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_
 	}
 }
 
+void SceneTreeEditor::_tree_scroll_to_item(ObjectID p_item_id) {
+	ERR_FAIL_NULL(tree);
+	TreeItem *item = Object::cast_to<TreeItem>(ObjectDB::get_instance(p_item_id));
+	if (item) {
+		tree->scroll_to_item(item, true);
+	}
+}
+
 void SceneTreeEditor::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_ENTER_TREE: {
@@ -942,7 +950,8 @@ void SceneTreeEditor::_notification(int p_what) {
 
 				if (item) {
 					// Must wait until tree is properly sized before scrolling.
-					callable_mp(tree, &Tree::scroll_to_item).call_deferred(item, true);
+					ObjectID item_id = item->get_instance_id();
+					callable_mp(this, &SceneTreeEditor::_tree_scroll_to_item).call_deferred(item_id);
 				}
 			}
 		} break;

+ 1 - 0
editor/gui/scene_tree_editor.h

@@ -123,6 +123,7 @@ class SceneTreeEditor : public Control {
 	void _set_item_custom_color(TreeItem *p_item, Color p_color);
 	void _update_node_tooltip(Node *p_node, TreeItem *p_item);
 	void _queue_update_node_tooltip(Node *p_node, TreeItem *p_item);
+	void _tree_scroll_to_item(ObjectID p_item_id);
 
 	void _selection_changed();
 	Node *get_scene_node() const;