mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	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.
(cherry picked from commit 28ab60422d)
			
			
This commit is contained in:
		
							parent
							
								
									43dcf23990
								
							
						
					
					
						commit
						7563c17113
					
				
					 1 changed files with 7 additions and 1 deletions
				
			
		|  | @ -587,6 +587,10 @@ void EditorNode::open_resource(const String &p_type) { | ||||||
| void EditorNode::save_resource_in_path(const Ref<Resource> &p_resource, const String &p_path) { | void EditorNode::save_resource_in_path(const Ref<Resource> &p_resource, const String &p_path) { | ||||||
| 
 | 
 | ||||||
| 	editor_data.apply_changes_in_editors(); | 	editor_data.apply_changes_in_editors(); | ||||||
|  | 	if (p_resource->get_last_modified_time() == p_resource->get_import_last_modified_time()) { | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	int flg = 0; | 	int flg = 0; | ||||||
| 	if (EditorSettings::get_singleton()->get("filesystem/on_save/compress_binary_resources")) | 	if (EditorSettings::get_singleton()->get("filesystem/on_save/compress_binary_resources")) | ||||||
| 		flg |= ResourceSaver::FLAG_COMPRESS; | 		flg |= ResourceSaver::FLAG_COMPRESS; | ||||||
|  | @ -1072,7 +1076,8 @@ void EditorNode::_save_scene(String p_file, int idx) { | ||||||
| 
 | 
 | ||||||
| void EditorNode::_save_all_scenes() { | 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); | 		Node *scene = editor_data.get_edited_scene_root(i); | ||||||
| 		if (scene && scene->get_filename() != "") { | 		if (scene && scene->get_filename() != "") { | ||||||
| 			if (i != editor_data.get_edited_scene()) | 			if (i != editor_data.get_edited_scene()) | ||||||
|  | @ -1080,6 +1085,7 @@ void EditorNode::_save_all_scenes() { | ||||||
| 			else | 			else | ||||||
| 				_save_scene_with_preview(scene->get_filename()); | 				_save_scene_with_preview(scene->get_filename()); | ||||||
| 		} // else: ignore new scenes
 | 		} // else: ignore new scenes
 | ||||||
|  | 		i = _next_unsaved_scene(true, ++i); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	_save_default_environment(); | 	_save_default_environment(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 robfram
						robfram