diff options
Diffstat (limited to 'editor/plugins/script_editor_plugin.cpp')
-rw-r--r-- | editor/plugins/script_editor_plugin.cpp | 78 |
1 files changed, 68 insertions, 10 deletions
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 1d449d79a6..78ba26503d 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -846,13 +846,14 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) { _update_selected_editor_menu(); } - _update_history_arrows(); - - _update_script_names(); - _update_members_overview_visibility(); - _update_help_overview_visibility(); - _save_layout(); - _update_find_replace_bar(); + if (script_close_queue.is_empty()) { + _update_history_arrows(); + _update_script_names(); + _update_members_overview_visibility(); + _update_help_overview_visibility(); + _save_layout(); + _update_find_replace_bar(); + } } void ScriptEditor::_close_current_tab(bool p_save) { @@ -2434,6 +2435,18 @@ bool ScriptEditor::edit(const Ref<Resource> &p_resource, int p_line, int p_col, return true; } +PackedStringArray ScriptEditor::get_unsaved_scripts() const { + PackedStringArray unsaved_list; + + for (int i = 0; i < tab_container->get_tab_count(); i++) { + ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_tab_control(i)); + if (se && se->is_unsaved()) { + unsaved_list.append(se->get_name()); + } + } + return unsaved_list; +} + void ScriptEditor::save_current_script() { ScriptEditorBase *current = _get_current_editor(); if (!current || _test_script_times_on_disk()) { @@ -3911,8 +3924,8 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { _update_recent_scripts(); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KeyModifierMask::ALT | KeyModifierMask::CMD_OR_CTRL | Key::S), FILE_SAVE); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As...")), FILE_SAVE_AS); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KeyModifierMask::CMD_OR_CTRL | Key::S), FILE_SAVE); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As..."), KeyModifierMask::CMD_OR_CTRL | KeyModifierMask::SHIFT | Key::S), FILE_SAVE_AS); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KeyModifierMask::SHIFT | KeyModifierMask::ALT | Key::S), FILE_SAVE_ALL); ED_SHORTCUT_OVERRIDE("script_editor/save_all", "macos", KeyModifierMask::META | KeyModifierMask::CTRL | Key::S); file_menu->get_popup()->add_separator(); @@ -4206,8 +4219,53 @@ void ScriptEditorPlugin::selected_notify() { _focus_another_editor(); } +String ScriptEditorPlugin::get_unsaved_status(const String &p_for_scene) const { + const PackedStringArray unsaved_scripts = script_editor->get_unsaved_scripts(); + if (unsaved_scripts.is_empty()) { + return String(); + } + + PackedStringArray message; + if (!p_for_scene.is_empty()) { + PackedStringArray unsaved_built_in_scripts; + + const String scene_file = p_for_scene.get_file(); + for (const String &E : unsaved_scripts) { + if (!E.is_resource_file() && E.contains(scene_file)) { + unsaved_built_in_scripts.append(E); + } + } + + if (unsaved_built_in_scripts.is_empty()) { + return String(); + } else { + message.resize(unsaved_built_in_scripts.size() + 1); + message.write[0] = TTR("There are unsaved changes in the following built-in script(s):"); + + int i = 1; + for (const String &E : unsaved_built_in_scripts) { + message.write[i] = E.trim_suffix("(*)"); + i++; + } + return String("\n").join(message); + } + } + + message.resize(unsaved_scripts.size() + 1); + message.write[0] = TTR("Save changes to the following script(s) before quitting?"); + + int i = 1; + for (const String &E : unsaved_scripts) { + message.write[i] = E.trim_suffix("(*)"); + i++; + } + return String("\n").join(message); +} + void ScriptEditorPlugin::save_external_data() { - script_editor->save_all_scripts(); + if (!EditorNode::get_singleton()->is_exiting()) { + script_editor->save_all_scripts(); + } } void ScriptEditorPlugin::apply_changes() { |