diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 718233e8c806..8ba85032f126 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -755,7 +755,7 @@ void EditorNode::_notification(int p_what) { case NOTIFICATION_APPLICATION_FOCUS_OUT: { // Save on focus loss before applying the FPS limit to avoid slowing down the saving process. if (EDITOR_GET("interface/editor/save_on_focus_loss")) { - _menu_option_confirm(FILE_SAVE_SCENE, false); + _menu_option_confirm(FILE_SAVE_SCENE_SILENTLY, false); } // Set a low FPS cap to decrease CPU/GPU usage while the editor is unfocused. @@ -2673,6 +2673,16 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case FILE_CLOSE: { _scene_tab_closed(editor_data.get_edited_scene()); } break; + case FILE_SAVE_SCENE_SILENTLY: { + // Save scene without displaying progress dialog. Used to work around + // errors about parent node being busy setting up children + // when Save on Focus Loss kicks in. + Node *scene = editor_data.get_edited_scene_root(); + if (scene && !scene->get_scene_file_path().is_empty() && DirAccess::exists(scene->get_scene_file_path().get_base_dir())) { + _save_scene(scene->get_scene_file_path()); + save_editor_layout_delayed(); + } + } break; case SCENE_TAB_CLOSE: case FILE_SAVE_SCENE: { int scene_idx = (p_option == FILE_SAVE_SCENE) ? -1 : tab_closing_idx; diff --git a/editor/editor_node.h b/editor/editor_node.h index 54c84bc6a6d5..6b3359eaeeb7 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -159,6 +159,7 @@ class EditorNode : public Node { FILE_NEW_INHERITED_SCENE, FILE_OPEN_SCENE, FILE_SAVE_SCENE, + FILE_SAVE_SCENE_SILENTLY, FILE_SAVE_AS_SCENE, FILE_SAVE_ALL_SCENES, FILE_SAVE_AND_RUN,