Merge pull request #66405 from Rindbee/fix-gd-not-sync-via-lsp
Fix out of sync when the script is edited externally via lsp
This commit is contained in:
commit
e406badafd
3 changed files with 27 additions and 23 deletions
|
@ -2546,7 +2546,7 @@ void ScriptEditor::apply_scripts() const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEditor::reload_scripts() {
|
void ScriptEditor::reload_scripts(bool p_refresh_only) {
|
||||||
for (int i = 0; i < tab_container->get_tab_count(); i++) {
|
for (int i = 0; i < tab_container->get_tab_count(); i++) {
|
||||||
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_tab_control(i));
|
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_tab_control(i));
|
||||||
if (!se) {
|
if (!se) {
|
||||||
|
@ -2559,30 +2559,33 @@ void ScriptEditor::reload_scripts() {
|
||||||
continue; //internal script, who cares
|
continue; //internal script, who cares
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t last_date = edited_res->get_last_modified_time();
|
if (!p_refresh_only) {
|
||||||
uint64_t date = FileAccess::get_modified_time(edited_res->get_path());
|
uint64_t last_date = edited_res->get_last_modified_time();
|
||||||
|
uint64_t date = FileAccess::get_modified_time(edited_res->get_path());
|
||||||
|
|
||||||
if (last_date == date) {
|
if (last_date == date) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<Script> script = edited_res;
|
||||||
|
if (script != nullptr) {
|
||||||
|
Ref<Script> rel_script = ResourceLoader::load(script->get_path(), script->get_class(), ResourceFormatLoader::CACHE_MODE_IGNORE);
|
||||||
|
ERR_CONTINUE(!rel_script.is_valid());
|
||||||
|
script->set_source_code(rel_script->get_source_code());
|
||||||
|
script->set_last_modified_time(rel_script->get_last_modified_time());
|
||||||
|
script->reload(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<TextFile> text_file = edited_res;
|
||||||
|
if (text_file != nullptr) {
|
||||||
|
Error err;
|
||||||
|
Ref<TextFile> rel_text_file = _load_text_file(text_file->get_path(), &err);
|
||||||
|
ERR_CONTINUE(!rel_text_file.is_valid());
|
||||||
|
text_file->set_text(rel_text_file->get_text());
|
||||||
|
text_file->set_last_modified_time(rel_text_file->get_last_modified_time());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Script> script = edited_res;
|
|
||||||
if (script != nullptr) {
|
|
||||||
Ref<Script> rel_script = ResourceLoader::load(script->get_path(), script->get_class(), ResourceFormatLoader::CACHE_MODE_IGNORE);
|
|
||||||
ERR_CONTINUE(!rel_script.is_valid());
|
|
||||||
script->set_source_code(rel_script->get_source_code());
|
|
||||||
script->set_last_modified_time(rel_script->get_last_modified_time());
|
|
||||||
script->reload(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<TextFile> text_file = edited_res;
|
|
||||||
if (text_file != nullptr) {
|
|
||||||
Error err;
|
|
||||||
Ref<TextFile> rel_text_file = _load_text_file(text_file->get_path(), &err);
|
|
||||||
ERR_CONTINUE(!rel_text_file.is_valid());
|
|
||||||
text_file->set_text(rel_text_file->get_text());
|
|
||||||
text_file->set_last_modified_time(rel_text_file->get_last_modified_time());
|
|
||||||
}
|
|
||||||
se->reload_text();
|
se->reload_text();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -477,7 +477,7 @@ public:
|
||||||
bool toggle_scripts_panel();
|
bool toggle_scripts_panel();
|
||||||
bool is_scripts_panel_toggled();
|
bool is_scripts_panel_toggled();
|
||||||
void apply_scripts() const;
|
void apply_scripts() const;
|
||||||
void reload_scripts();
|
void reload_scripts(bool p_refresh_only = false);
|
||||||
void open_script_create_dialog(const String &p_base_name, const String &p_base_path);
|
void open_script_create_dialog(const String &p_base_name, const String &p_base_path);
|
||||||
void open_text_file_create_dialog(const String &p_base_path, const String &p_base_name = "");
|
void open_text_file_create_dialog(const String &p_base_path, const String &p_base_name = "");
|
||||||
Ref<Resource> open_file(const String &p_file);
|
Ref<Resource> open_file(const String &p_file);
|
||||||
|
|
|
@ -422,6 +422,7 @@ void GDScriptTextDocument::sync_script_content(const String &p_path, const Strin
|
||||||
if (error == OK) {
|
if (error == OK) {
|
||||||
if (script->load_source_code(path) == OK) {
|
if (script->load_source_code(path) == OK) {
|
||||||
script->reload(true);
|
script->reload(true);
|
||||||
|
ScriptEditor::get_singleton()->reload_scripts(true); // Refresh scripts opened in the internal editor.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue