From 00d8f5f70cee1c828316d525ee1edeb773681d43 Mon Sep 17 00:00:00 2001 From: kobewi Date: Sat, 25 Jan 2025 12:24:29 +0100 Subject: [PATCH] Ask before restarting project from settings --- editor/editor_node.cpp | 90 ++++++++++++++++++++++-------------------- editor/editor_node.h | 1 + 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 84a4b42f536..6b725240f9e 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -2057,45 +2057,7 @@ void EditorNode::try_autosave() { } void EditorNode::restart_editor(bool p_goto_project_manager) { - exiting = true; - - if (project_run_bar->is_playing()) { - project_run_bar->stop_playing(); - } - - String to_reopen; - if (!p_goto_project_manager && get_tree()->get_edited_scene_root()) { - to_reopen = get_tree()->get_edited_scene_root()->get_scene_file_path(); - } - - _exit_editor(EXIT_SUCCESS); - - List args; - for (const String &a : Main::get_forwardable_cli_arguments(Main::CLI_SCOPE_TOOL)) { - args.push_back(a); - } - - if (p_goto_project_manager) { - args.push_back("--project-manager"); - - // Setup working directory. - const String exec_dir = OS::get_singleton()->get_executable_path().get_base_dir(); - if (!exec_dir.is_empty()) { - args.push_back("--path"); - args.push_back(exec_dir); - } - } else { - args.push_back("--path"); - args.push_back(ProjectSettings::get_singleton()->get_resource_path()); - - args.push_back("-e"); - } - - if (!to_reopen.is_empty()) { - args.push_back(to_reopen); - } - - OS::get_singleton()->set_restart_on_exit(true, args); + _menu_option_confirm(p_goto_project_manager ? PROJECT_QUIT_TO_PROJECT_MANAGER : PROJECT_RELOAD_CURRENT_PROJECT, false); } void EditorNode::_save_all_scenes() { @@ -3480,10 +3442,10 @@ void EditorNode::_discard_changes(const String &p_str) { } break; case PROJECT_QUIT_TO_PROJECT_MANAGER: { - restart_editor(true); + _restart_editor(true); } break; case PROJECT_RELOAD_CURRENT_PROJECT: { - restart_editor(); + _restart_editor(); } break; } } @@ -5508,11 +5470,11 @@ bool EditorNode::has_scenes_in_session() { } void EditorNode::undo() { - trigger_menu_option(FILE_UNDO, true); + _menu_option_confirm(FILE_UNDO, true); } void EditorNode::redo() { - trigger_menu_option(FILE_REDO, true); + _menu_option_confirm(FILE_REDO, true); } bool EditorNode::ensure_main_scene(bool p_from_native) { @@ -5680,6 +5642,48 @@ bool EditorNode::_is_closing_editor() const { return tab_closing_menu_option == FILE_QUIT || tab_closing_menu_option == PROJECT_QUIT_TO_PROJECT_MANAGER || tab_closing_menu_option == PROJECT_RELOAD_CURRENT_PROJECT; } +void EditorNode::_restart_editor(bool p_goto_project_manager) { + exiting = true; + + if (project_run_bar->is_playing()) { + project_run_bar->stop_playing(); + } + + String to_reopen; + if (!p_goto_project_manager && get_tree()->get_edited_scene_root()) { + to_reopen = get_tree()->get_edited_scene_root()->get_scene_file_path(); + } + + _exit_editor(EXIT_SUCCESS); + + List args; + for (const String &a : Main::get_forwardable_cli_arguments(Main::CLI_SCOPE_TOOL)) { + args.push_back(a); + } + + if (p_goto_project_manager) { + args.push_back("--project-manager"); + + // Setup working directory. + const String exec_dir = OS::get_singleton()->get_executable_path().get_base_dir(); + if (!exec_dir.is_empty()) { + args.push_back("--path"); + args.push_back(exec_dir); + } + } else { + args.push_back("--path"); + args.push_back(ProjectSettings::get_singleton()->get_resource_path()); + + args.push_back("-e"); + } + + if (!to_reopen.is_empty()) { + args.push_back(to_reopen); + } + + OS::get_singleton()->set_restart_on_exit(true, args); +} + void EditorNode::_scene_tab_closed(int p_tab) { current_menu_option = SCENE_TAB_CLOSE; tab_closing_idx = p_tab; diff --git a/editor/editor_node.h b/editor/editor_node.h index 3ace2e868c5..de3af997473 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -624,6 +624,7 @@ private: void _proceed_closing_scene_tabs(); bool _is_closing_editor() const; + void _restart_editor(bool p_goto_project_manager = false); Dictionary _get_main_scene_state(); void _set_main_scene_state(Dictionary p_state, Node *p_for_scene);