diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-04-05 17:23:03 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-04-05 17:23:03 +0200 |
commit | 655e93d5846b2ef8ebb7d22c8878f51b8f22b312 (patch) | |
tree | 510ee1246b36f9b5170d1747e4a07405e458c547 | |
parent | c493217947e645c89a095491b7fae87a2ad07710 (diff) | |
parent | 6b8daa498e2e31edec4b89e0c5321cef7bb51be8 (diff) | |
download | redot-engine-655e93d5846b2ef8ebb7d22c8878f51b8f22b312.tar.gz |
Merge pull request #90266 from akien-mga/scenetreeeditor-fix-treeitem-crash
SceneTreeEditor: Fix crash when TreeItem is removed before callback
-rw-r--r-- | editor/gui/scene_tree_editor.cpp | 11 | ||||
-rw-r--r-- | editor/gui/scene_tree_editor.h | 1 |
2 files changed, 11 insertions, 1 deletions
diff --git a/editor/gui/scene_tree_editor.cpp b/editor/gui/scene_tree_editor.cpp index 0dd75ea033..221061f9f7 100644 --- a/editor/gui/scene_tree_editor.cpp +++ b/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; diff --git a/editor/gui/scene_tree_editor.h b/editor/gui/scene_tree_editor.h index c1abdcef8b..b4d9644f16 100644 --- a/editor/gui/scene_tree_editor.h +++ b/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; |