1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-23 15:16:17 +00:00

SceneTreeEditor: Fix crash when TreeItem is removed before callback

Fixes #90235.

Co-authored-by: bruvzg <7645683+bruvzg@users.noreply.github.com>
This commit is contained in:
Rémi Verschelde
2024-04-05 16:51:54 +02:00
parent 7e4c150573
commit 6b8daa498e
2 changed files with 11 additions and 1 deletions

View File

@@ -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) { void SceneTreeEditor::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_TREE: { case NOTIFICATION_ENTER_TREE: {
@@ -942,7 +950,8 @@ void SceneTreeEditor::_notification(int p_what) {
if (item) { if (item) {
// Must wait until tree is properly sized before scrolling. // 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; } break;

View File

@@ -123,6 +123,7 @@ class SceneTreeEditor : public Control {
void _set_item_custom_color(TreeItem *p_item, Color p_color); void _set_item_custom_color(TreeItem *p_item, Color p_color);
void _update_node_tooltip(Node *p_node, TreeItem *p_item); void _update_node_tooltip(Node *p_node, TreeItem *p_item);
void _queue_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(); void _selection_changed();
Node *get_scene_node() const; Node *get_scene_node() const;