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 /editor/gui/scene_tree_editor.cpp | |
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
Diffstat (limited to 'editor/gui/scene_tree_editor.cpp')
-rw-r--r-- | editor/gui/scene_tree_editor.cpp | 11 |
1 files changed, 10 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; |