Browse Source

fix error where update wouldn't reconnect the signal it should have reconnected and led to errors and crash

ajreckof 1 year ago
parent
commit
69e5e582c8
2 changed files with 14 additions and 10 deletions
  1. 6 2
      editor/editor_data.cpp
  2. 8 8
      editor/editor_node.cpp

+ 6 - 2
editor/editor_data.cpp

@@ -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());
-
-		memdelete(edited_scene[p_idx].root);
+		Node *old_root = 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();

+ 8 - 8
editor/editor_node.cpp

@@ -3790,14 +3790,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());
 
 
@@ -3836,6 +3828,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) {