diff --git a/editor/script/script_editor_plugin.cpp b/editor/script/script_editor_plugin.cpp index c6677dc7a6f..42cd41c70b7 100644 --- a/editor/script/script_editor_plugin.cpp +++ b/editor/script/script_editor_plugin.cpp @@ -1291,6 +1291,16 @@ void _save_text_editor_theme_as(const String &p_file) { } } +bool ScriptEditor::_script_exists(const String &p_path) const { + if (p_path.is_empty()) { + return false; + } else if (p_path.is_resource_file()) { + return FileAccess::exists(p_path); + } else { + return FileAccess::exists(p_path.get_slice("::", 0)); + } +} + void ScriptEditor::_file_dialog_action(const String &p_file) { switch (file_dialog_option) { case FILE_MENU_NEW_TEXTFILE: { @@ -3038,7 +3048,7 @@ void ScriptEditor::_save_editor_state(ScriptEditorBase *p_editor) { } const String &path = p_editor->get_edited_resource()->get_path(); - if (!path.is_resource_file()) { + if (path.is_empty()) { return; } @@ -3574,23 +3584,37 @@ void ScriptEditor::set_window_layout(Ref p_layout) { ResourceLoader::get_recognized_extensions_for_type("Script", &extensions); ResourceLoader::get_recognized_extensions_for_type("JSON", &extensions); - for (int i = 0; i < scripts.size(); i++) { - String path = scripts[i]; + for (const Variant &v : scripts) { + String path = v; - Dictionary script_info = scripts[i]; + Dictionary script_info = v; if (!script_info.is_empty()) { path = script_info["path"]; } - if (!FileAccess::exists(path)) { + if (!_script_exists(path)) { if (script_editor_cache->has_section(path)) { script_editor_cache->erase_section(path); } continue; + } else if (!path.is_resource_file() && !EditorNode::get_singleton()->is_scene_open(path.get_slice("::", 0))) { + continue; } loaded_scripts.insert(path); - if (extensions.find(path.get_extension())) { + bool is_script = false; + if (path.is_resource_file()) { + is_script = extensions.find(path.get_extension()); + } else { + Ref