Skip to content

Commit 248b865

Browse files
committed
Fix Ignore External Changes Bug
Fix Issue #106410 : Add a check for external modified scene files (_is_scene_externally_modified()) before handling the logic of ignoring external changes.
1 parent 4a44078 commit 248b865

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

editor/editor_node.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,24 +1298,27 @@ void EditorNode::_remove_lock_file() {
12981298
OS::get_singleton()->remove_lock_file();
12991299
}
13001300

1301+
bool EditorNode::_is_scene_externally_modified(int scene_index) {
1302+
Ref<DirAccess> dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES);
1303+
if (editor_data.get_scene_path(scene_index) == "" || !dir_access->file_exists(editor_data.get_scene_path(scene_index))) {
1304+
return false;
1305+
}
1306+
1307+
uint64_t last_date = editor_data.get_scene_modified_time(scene_index);
1308+
uint64_t date = FileAccess::get_modified_time(editor_data.get_scene_path(scene_index));
1309+
1310+
return date > last_date;
1311+
}
1312+
13011313
void EditorNode::_scan_external_changes() {
13021314
disk_changed_list->clear();
13031315
TreeItem *r = disk_changed_list->create_item();
13041316
disk_changed_list->set_hide_root(true);
13051317
bool need_reload = false;
13061318

13071319
// Check if any edited scene has changed.
1308-
13091320
for (int i = 0; i < editor_data.get_edited_scene_count(); i++) {
1310-
Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
1311-
if (editor_data.get_scene_path(i) == "" || !da->file_exists(editor_data.get_scene_path(i))) {
1312-
continue;
1313-
}
1314-
1315-
uint64_t last_date = editor_data.get_scene_modified_time(i);
1316-
uint64_t date = FileAccess::get_modified_time(editor_data.get_scene_path(i));
1317-
1318-
if (date > last_date) {
1321+
if (_is_scene_externally_modified(i)) {
13191322
TreeItem *ti = disk_changed_list->create_item(r);
13201323
ti->set_text(0, editor_data.get_scene_path(i).get_file());
13211324
need_reload = true;
@@ -2152,7 +2155,7 @@ void EditorNode::restart_editor(bool p_goto_project_manager) {
21522155
void EditorNode::_save_all_scenes() {
21532156
scenes_to_save_as.clear(); // In case saving was canceled before.
21542157
for (int i = 0; i < editor_data.get_edited_scene_count(); i++) {
2155-
if (!_is_scene_unsaved(i)) {
2158+
if (!_is_scene_unsaved(i) && !_is_scene_externally_modified(i)) {
21562159
continue;
21572160
}
21582161

editor/editor_node.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,7 @@ class EditorNode : public Node {
671671
void _update_update_spinner();
672672

673673
void _resources_changed(const Vector<String> &p_resources);
674+
bool _is_scene_externally_modified(int scene_index);
674675
void _scan_external_changes();
675676
void _reload_modified_scenes();
676677
void _reload_project_settings();

0 commit comments

Comments
 (0)