summaryrefslogtreecommitdiffstats
path: root/editor/plugins/script_editor_plugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/plugins/script_editor_plugin.cpp')
-rw-r--r--editor/plugins/script_editor_plugin.cpp78
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() {