From 787cad1799481c80fba42fa313ce85930e137085 Mon Sep 17 00:00:00 2001 From: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> Date: Tue, 8 Apr 2025 18:39:02 +0200 Subject: [PATCH] [Editor] Use separate `EditorFileDialog` for "Pack Project as ZIP" This prevents state corruption for saving resources. --- editor/editor_node.cpp | 19 +++++++++++-------- editor/editor_node.h | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index b0d21c58dc5..d4fba8e0252 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -3030,14 +3030,9 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { String resource_path = ProjectSettings::get_singleton()->get_resource_path(); const String base_path = resource_path.substr(0, resource_path.rfind_char('/')) + "/"; - file->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); - file->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - file->clear_filters(); - file->set_current_path(base_path); - file->set_current_file(ProjectZIPPacker::get_project_zip_safe_name()); - file->add_filter("*.zip", "ZIP Archive"); - file->set_title(TTR("Pack Project as ZIP...")); - file->popup_file_dialog(); + file_pack_zip->set_current_path(base_path); + file_pack_zip->set_current_file(ProjectZIPPacker::get_project_zip_safe_name()); + file_pack_zip->popup_file_dialog(); } break; case FILE_UNDO: { @@ -8068,6 +8063,14 @@ EditorNode::EditorNode() { gui_base->add_child(file_script); file_script->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action)); + file_pack_zip = memnew(EditorFileDialog); + file_pack_zip->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action)); + file_pack_zip->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); + file_pack_zip->set_access(EditorFileDialog::ACCESS_FILESYSTEM); + file_pack_zip->add_filter("*.zip", "ZIP Archive"); + file_pack_zip->set_title(TTR("Pack Project as ZIP...")); + gui_base->add_child(file_pack_zip); + file_menu->connect(SceneStringName(id_pressed), callable_mp(this, &EditorNode::_menu_option)); file_menu->connect("about_to_popup", callable_mp(this, &EditorNode::_update_file_menu_opened)); diff --git a/editor/editor_node.h b/editor/editor_node.h index fd9d01f4d9b..aff8ee11334 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -385,6 +385,7 @@ private: EditorFileDialog *file_export_lib = nullptr; EditorFileDialog *file_script = nullptr; EditorFileDialog *file_android_build_source = nullptr; + EditorFileDialog *file_pack_zip = nullptr; String current_path; MenuButton *update_spinner = nullptr;