Merge pull request #116848 from billuo/bugfix/issue-116788-crash
Fix `reload_scene_from_path` may crash
This commit is contained in:
@@ -1331,16 +1331,20 @@ void EditorSelection::_update_node_list() {
|
||||
node_list_changed = false;
|
||||
}
|
||||
|
||||
void EditorSelection::update() {
|
||||
void EditorSelection::update(bool p_deferred) {
|
||||
_update_node_list();
|
||||
|
||||
if (!changed) {
|
||||
return;
|
||||
}
|
||||
changed = false;
|
||||
if (!emitted) {
|
||||
emitted = true;
|
||||
callable_mp(this, &EditorSelection::_emit_change).call_deferred();
|
||||
if (p_deferred) {
|
||||
if (!emitted) {
|
||||
emitted = true;
|
||||
callable_mp(this, &EditorSelection::_emit_change).call_deferred();
|
||||
}
|
||||
} else {
|
||||
_emit_change();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@ public:
|
||||
// Adds an editor plugin which can provide metadata for selected nodes.
|
||||
void add_editor_plugin(Object *p_object);
|
||||
|
||||
void update();
|
||||
void update(bool p_deferred = true);
|
||||
void clear();
|
||||
|
||||
// Returns only the top level selected nodes.
|
||||
|
||||
@@ -4480,7 +4480,8 @@ bool EditorNode::is_addon_plugin_enabled(const String &p_addon) const {
|
||||
void EditorNode::_remove_edited_scene(bool p_change_tab) {
|
||||
// When scene gets closed no node is edited anymore, so make sure the editors are notified before nodes are freed.
|
||||
hide_unused_editors(SceneTreeDock::get_singleton());
|
||||
SceneTreeDock::get_singleton()->clear_previous_node_selection();
|
||||
editor_selection->clear();
|
||||
editor_selection->update(false);
|
||||
|
||||
int new_index = editor_data.get_edited_scene();
|
||||
int old_index = new_index;
|
||||
|
||||
@@ -1467,11 +1467,10 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) {
|
||||
if (selected == p_node) {
|
||||
return;
|
||||
}
|
||||
selected = p_node;
|
||||
|
||||
TreeItem *item = p_node ? _find(tree->get_root(), p_node->get_path()) : nullptr;
|
||||
|
||||
if (item) {
|
||||
selected = p_node;
|
||||
if (auto_expand_selected) {
|
||||
// Make visible when it's collapsed.
|
||||
TreeItem *node = item->get_parent();
|
||||
@@ -1500,11 +1499,6 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) {
|
||||
tree->ensure_cursor_is_visible();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!p_node) {
|
||||
selected = nullptr;
|
||||
}
|
||||
selected = p_node;
|
||||
}
|
||||
|
||||
if (p_emit_selected) {
|
||||
|
||||
Reference in New Issue
Block a user