diff --git a/doc/classes/ScriptEditor.xml b/doc/classes/ScriptEditor.xml index d0f602826f..3ebfa622bf 100644 --- a/doc/classes/ScriptEditor.xml +++ b/doc/classes/ScriptEditor.xml @@ -48,6 +48,12 @@ Returns an array with all [Script] objects which are currently open in editor. + + + + Returns an array of file paths of scripts with unsaved changes open in the editor. + + diff --git a/editor/script/script_editor_plugin.cpp b/editor/script/script_editor_plugin.cpp index b64240c677..0c6813707e 100644 --- a/editor/script/script_editor_plugin.cpp +++ b/editor/script/script_editor_plugin.cpp @@ -2382,6 +2382,18 @@ PackedStringArray ScriptEditor::get_unsaved_scripts() const { return unsaved_list; } +PackedStringArray ScriptEditor::get_unsaved_files() const { + PackedStringArray unsaved_list; + + for (int i = 0; i < tab_container->get_tab_count(); i++) { + ScriptEditorBase *seb = Object::cast_to(tab_container->get_tab_control(i)); + if (seb && seb->is_unsaved()) { + unsaved_list.append(seb->get_edited_resource()->get_path()); + } + } + return unsaved_list; +} + void ScriptEditor::save_current_script() { ScriptEditorBase *current = _get_current_editor(); if (!current || _test_script_times_on_disk()) { @@ -3775,6 +3787,8 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("update_docs_from_script", "script"), &ScriptEditor::update_docs_from_script); ClassDB::bind_method(D_METHOD("clear_docs_from_script", "script"), &ScriptEditor::clear_docs_from_script); + ClassDB::bind_method(D_METHOD("get_unsaved_files"), &ScriptEditor::get_unsaved_files); + ClassDB::bind_method(D_METHOD("save_all_scripts"), &ScriptEditor::save_all_scripts); ADD_SIGNAL(MethodInfo("editor_script_changed", PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, Script::get_class_static()))); diff --git a/editor/script/script_editor_plugin.h b/editor/script/script_editor_plugin.h index 2de8f17686..ba42730c38 100644 --- a/editor/script/script_editor_plugin.h +++ b/editor/script/script_editor_plugin.h @@ -424,6 +424,7 @@ public: void get_breakpoints(List *p_breakpoints); void reload_open_files(); + PackedStringArray get_unsaved_files() const; PackedStringArray get_unsaved_scripts() const; void save_current_script(); void save_all_scripts();