Don't stop closing on unsaved script

(cherry picked from commit 8fe664fb4b)
This commit is contained in:
kobewi 2021-09-07 23:38:19 +02:00 committed by Rémi Verschelde
parent ae38c672f1
commit 168292fa00
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 22 additions and 23 deletions

View file

@ -635,39 +635,35 @@ void ScriptEditor::_copy_script_path() {
} }
void ScriptEditor::_close_other_tabs() { void ScriptEditor::_close_other_tabs() {
int child_count = tab_container->get_child_count();
int current_idx = tab_container->get_current_tab(); int current_idx = tab_container->get_current_tab();
for (int i = child_count - 1; i >= 0; i--) { for (int i = tab_container->get_child_count() - 1; i >= 0; i--) {
if (i == current_idx) { if (i != current_idx) {
continue; script_close_queue.push_back(i);
} }
tab_container->set_current_tab(i);
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i));
if (se) {
// Maybe there are unsaved changes
if (se->is_unsaved()) {
_ask_close_current_unsaved_tab(se);
continue;
}
}
_close_current_tab(false);
} }
_queue_close_tabs();
} }
void ScriptEditor::_close_all_tabs() { void ScriptEditor::_close_all_tabs() {
int child_count = tab_container->get_child_count(); for (int i = tab_container->get_child_count() - 1; i >= 0; i--) {
for (int i = child_count - 1; i >= 0; i--) { script_close_queue.push_back(i);
tab_container->set_current_tab(i); }
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i)); _queue_close_tabs();
}
void ScriptEditor::_queue_close_tabs() {
while (!script_close_queue.empty()) {
int idx = script_close_queue.front()->get();
script_close_queue.pop_front();
tab_container->set_current_tab(idx);
ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(idx));
if (se) { if (se) {
// Maybe there are unsaved changes // Maybe there are unsaved changes.
if (se->is_unsaved()) { if (se->is_unsaved()) {
_ask_close_current_unsaved_tab(se); _ask_close_current_unsaved_tab(se);
continue; erase_tab_confirm->connect(SceneStringNames::get_singleton()->visibility_changed, this, "_queue_close_tabs", varray(), CONNECT_ONESHOT);
break;
} }
} }
@ -3048,6 +3044,7 @@ void ScriptEditor::_bind_methods() {
ClassDB::bind_method("_close_docs_tab", &ScriptEditor::_close_docs_tab); ClassDB::bind_method("_close_docs_tab", &ScriptEditor::_close_docs_tab);
ClassDB::bind_method("_close_all_tabs", &ScriptEditor::_close_all_tabs); ClassDB::bind_method("_close_all_tabs", &ScriptEditor::_close_all_tabs);
ClassDB::bind_method("_close_other_tabs", &ScriptEditor::_close_other_tabs); ClassDB::bind_method("_close_other_tabs", &ScriptEditor::_close_other_tabs);
ClassDB::bind_method("_queue_close_tabs", &ScriptEditor::_queue_close_tabs);
ClassDB::bind_method("_open_recent_script", &ScriptEditor::_open_recent_script); ClassDB::bind_method("_open_recent_script", &ScriptEditor::_open_recent_script);
ClassDB::bind_method("_theme_option", &ScriptEditor::_theme_option); ClassDB::bind_method("_theme_option", &ScriptEditor::_theme_option);
ClassDB::bind_method("_editor_play", &ScriptEditor::_editor_play); ClassDB::bind_method("_editor_play", &ScriptEditor::_editor_play);

View file

@ -262,6 +262,7 @@ class ScriptEditor : public PanelContainer {
int history_pos; int history_pos;
List<String> previous_scripts; List<String> previous_scripts;
List<int> script_close_queue;
void _tab_changed(int p_which); void _tab_changed(int p_which);
void _menu_option(int p_option); void _menu_option(int p_option);
@ -294,6 +295,7 @@ class ScriptEditor : public PanelContainer {
void _close_docs_tab(); void _close_docs_tab();
void _close_other_tabs(); void _close_other_tabs();
void _close_all_tabs(); void _close_all_tabs();
void _queue_close_tabs();
void _copy_script_path(); void _copy_script_path();