diff options
author | robfram <robfram@gmail.com> | 2018-03-17 18:52:39 +0100 |
---|---|---|
committer | robfram <robfram@gmail.com> | 2018-03-18 11:58:40 +0100 |
commit | 28ab60422d648d43d219186ea0ecffce1645188f (patch) | |
tree | a90d492724bb569ffb51b7533aa64a69a561d1bc /editor | |
parent | 201d2d7226ba4d385ac26e3cfaada180c2a7dacb (diff) |
Fix saving unmodified scenes and resources
When `_save_all_scenes` or `save_resource_in_path` was called, they
always saved all the scenes and the resource no matter if they were
modified or not. For example, when `saving before run` option was
checked, it always overwrote the current scene and the default
environment simply by opening and runing the project.
This PR adds checks for unsaved scenes (using the same `unsave` check
others method used) and modified resources (comparing last modified
time and last import time).
Fix #6025.
Diffstat (limited to 'editor')
-rw-r--r-- | editor/editor_node.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index e627263909..36ea90ed66 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -604,6 +604,10 @@ void EditorNode::open_resource(const String &p_type) { void EditorNode::save_resource_in_path(const Ref<Resource> &p_resource, const String &p_path) { editor_data.apply_changes_in_editors(); + if (p_resource->get_last_modified_time() == p_resource->get_import_last_modified_time()) { + return; + } + int flg = 0; if (EditorSettings::get_singleton()->get("filesystem/on_save/compress_binary_resources")) flg |= ResourceSaver::FLAG_COMPRESS; @@ -1089,7 +1093,8 @@ void EditorNode::_save_scene(String p_file, int idx) { void EditorNode::_save_all_scenes() { - for (int i = 0; i < editor_data.get_edited_scene_count(); i++) { + int i = _next_unsaved_scene(true, 0); + while (i != -1) { Node *scene = editor_data.get_edited_scene_root(i); if (scene && scene->get_filename() != "") { if (i != editor_data.get_edited_scene()) @@ -1097,6 +1102,7 @@ void EditorNode::_save_all_scenes() { else _save_scene_with_preview(scene->get_filename()); } // else: ignore new scenes + i = _next_unsaved_scene(true, ++i); } _save_default_environment(); |