You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
Merge pull request #89447 from ajreckof/fix-error-crash-on-change-type-root-after-external-changes
Fix error where update wouldn't reconnect the signal it should have reconnected and led to errors and crash.
This commit is contained in:
@@ -721,8 +721,12 @@ bool EditorData::check_and_update_scene(int p_idx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
new_scene->set_scene_file_path(edited_scene[p_idx].root->get_scene_file_path());
|
new_scene->set_scene_file_path(edited_scene[p_idx].root->get_scene_file_path());
|
||||||
|
Node *old_root = edited_scene[p_idx].root;
|
||||||
memdelete(edited_scene[p_idx].root);
|
for (int i = 0; i < old_root->get_child_count(); i++) {
|
||||||
|
memdelete(old_root->get_child(i));
|
||||||
|
}
|
||||||
|
old_root->replace_by(new_scene);
|
||||||
|
memdelete(old_root);
|
||||||
edited_scene.write[p_idx].root = new_scene;
|
edited_scene.write[p_idx].root = new_scene;
|
||||||
if (!new_scene->get_scene_file_path().is_empty()) {
|
if (!new_scene->get_scene_file_path().is_empty()) {
|
||||||
edited_scene.write[p_idx].path = new_scene->get_scene_file_path();
|
edited_scene.write[p_idx].path = new_scene->get_scene_file_path();
|
||||||
|
|||||||
@@ -3789,14 +3789,6 @@ void EditorNode::_set_current_scene_nocheck(int p_idx) {
|
|||||||
editor_folding.save_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx));
|
editor_folding.save_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editor_data.check_and_update_scene(p_idx)) {
|
|
||||||
if (editor_data.get_scene_path(p_idx) != "") {
|
|
||||||
editor_folding.load_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx));
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorUndoRedoManager::get_singleton()->clear_history(false, editor_data.get_scene_history_id(p_idx));
|
|
||||||
}
|
|
||||||
|
|
||||||
changing_scene = true;
|
changing_scene = true;
|
||||||
editor_data.save_edited_scene_state(editor_selection, &editor_history, _get_main_scene_state());
|
editor_data.save_edited_scene_state(editor_selection, &editor_history, _get_main_scene_state());
|
||||||
|
|
||||||
@@ -3835,6 +3827,14 @@ void EditorNode::_set_current_scene_nocheck(int p_idx) {
|
|||||||
if (tabs_to_close.is_empty()) {
|
if (tabs_to_close.is_empty()) {
|
||||||
callable_mp(this, &EditorNode::_set_main_scene_state).call_deferred(state, get_edited_scene()); // Do after everything else is done setting up.
|
callable_mp(this, &EditorNode::_set_main_scene_state).call_deferred(state, get_edited_scene()); // Do after everything else is done setting up.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (editor_data.check_and_update_scene(p_idx)) {
|
||||||
|
if (!editor_data.get_scene_path(p_idx).is_empty()) {
|
||||||
|
editor_folding.load_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx));
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorUndoRedoManager::get_singleton()->clear_history(false, editor_data.get_scene_history_id(p_idx));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorNode::setup_color_picker(ColorPicker *p_picker) {
|
void EditorNode::setup_color_picker(ColorPicker *p_picker) {
|
||||||
|
|||||||
Reference in New Issue
Block a user