summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorrobfram <robfram@gmail.com>2018-03-17 18:52:39 +0100
committerrobfram <robfram@gmail.com>2018-03-18 11:58:40 +0100
commit28ab60422d648d43d219186ea0ecffce1645188f (patch)
treea90d492724bb569ffb51b7533aa64a69a561d1bc /editor
parent201d2d7226ba4d385ac26e3cfaada180c2a7dacb (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.cpp8
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();