diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 218063566a1..209a006a06d 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -1351,18 +1351,21 @@ bool EditorExportPlatformPC::can_export(const Ref &p_preset, return valid; } -String EditorExportPlatformPC::get_binary_extension(const Ref &p_preset) const { +List EditorExportPlatformPC::get_binary_extensions(const Ref &p_preset) const { + List list; for (Map::Element *E = extensions.front(); E; E = E->next()) { if (p_preset->get(E->key())) { - return extensions[E->key()]; + list.push_back(extensions[E->key()]); + return list; } } if (extensions.has("default")) { - return extensions["default"]; + list.push_back(extensions["default"]); + return list; } - return ""; + return list; } Error EditorExportPlatformPC::export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags) { diff --git a/editor/editor_export.h b/editor/editor_export.h index d1165fd0424..380b33cd17b 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -245,7 +245,7 @@ public: virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const = 0; - virtual String get_binary_extension(const Ref &p_preset) const = 0; + virtual List get_binary_extensions(const Ref &p_preset) const = 0; virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0) = 0; virtual Error export_pack(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual Error export_zip(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); @@ -392,7 +392,7 @@ public: virtual Ref get_logo() const; virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const; - virtual String get_binary_extension(const Ref &p_preset) const; + virtual List get_binary_extensions(const Ref &p_preset) const; virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); void set_extension(const String &p_extension, const String &p_feature_key = "default"); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index d2dccdb4254..a297f2d47e1 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -804,13 +804,16 @@ void ProjectExportDialog::_export_project() { export_project->set_access(FileDialog::ACCESS_FILESYSTEM); export_project->clear_filters(); + List extension_list = platform->get_binary_extensions(current); + for (int i = 0; i < extension_list.size(); i++) { + export_project->add_filter("*." + extension_list[i] + " ; " + platform->get_name() + " Export"); + } + if (current->get_export_path() != "") { export_project->set_current_path(current->get_export_path()); } else { - String extension = platform->get_binary_extension(current); - if (extension != String()) { - export_project->add_filter("*." + extension + " ; " + platform->get_name() + " Export"); - export_project->set_current_file(default_filename + "." + extension); + if (extension_list.size() >= 1) { + export_project->set_current_file(default_filename + "." + extension_list[0]); } else { export_project->set_current_file(default_filename); } diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index edb84cce07c..3766f732e48 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -1459,8 +1459,10 @@ public: return valid; } - virtual String get_binary_extension(const Ref &p_preset) const { - return "apk"; + virtual List get_binary_extensions(const Ref &p_preset) const { + List list; + list.push_back("apk"); + return list; } virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0) { diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 63bc4a519bb..1fc497456c0 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -108,7 +108,11 @@ public: virtual String get_os_name() const { return "iOS"; } virtual Ref get_logo() const { return logo; } - virtual String get_binary_extension(const Ref &p_preset) const { return "ipa"; } + virtual List get_binary_extensions(const Ref &p_preset) const { + List list; + list.push_back("ipa"); + return list; + } virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const; diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp index 1e47d8db95b..7a325e81ddb 100644 --- a/platform/javascript/export/export.cpp +++ b/platform/javascript/export/export.cpp @@ -58,7 +58,7 @@ public: virtual Ref get_logo() const; virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const; - virtual String get_binary_extension(const Ref &p_preset) const; + virtual List get_binary_extensions(const Ref &p_preset) const; virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool poll_devices(); @@ -174,9 +174,11 @@ bool EditorExportPlatformJavaScript::can_export(const Ref &p return valid; } -String EditorExportPlatformJavaScript::get_binary_extension(const Ref &p_preset) const { +List EditorExportPlatformJavaScript::get_binary_extensions(const Ref &p_preset) const { - return "html"; + List list; + list.push_back("html"); + return list; } Error EditorExportPlatformJavaScript::export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags) { diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 27b4fdc2284..f27c0426374 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -74,7 +74,14 @@ public: virtual String get_os_name() const { return "OSX"; } virtual Ref get_logo() const { return logo; } - virtual String get_binary_extension(const Ref &p_preset) const { return use_dmg() ? "dmg" : "zip"; } + virtual List get_binary_extensions(const Ref &p_preset) const { + List list; + if (use_dmg()) { + list.push_back("dmg"); + } + list.push_back("zip"); + return list; + } virtual Error export_project(const Ref &p_preset, bool p_debug, const String &p_path, int p_flags = 0); virtual bool can_export(const Ref &p_preset, String &r_error, bool &r_missing_templates) const; @@ -334,7 +341,8 @@ Error EditorExportPlatformOSX::export_project(const Ref &p_p io2.opaque = &dst_f; zipFile dst_pkg_zip = NULL; - if (use_dmg()) { + String export_format = use_dmg() && p_path.ends_with("dmg") ? "dmg" : "zip"; + if (export_format == "dmg") { // We're on OSX so we can export to DMG, but first we create our application bundle tmp_app_path_name = EditorSettings::get_singleton()->get_cache_dir().plus_file(pkg_name + ".app"); print_line("Exporting to " + tmp_app_path_name); @@ -429,7 +437,7 @@ Error EditorExportPlatformOSX::export_project(const Ref &p_p print_line("ADDING: " + file + " size: " + itos(data.size())); total_size += data.size(); - if (use_dmg()) { + if (export_format == "dmg") { // write it into our application bundle file = tmp_app_path_name + "/" + file; @@ -491,7 +499,7 @@ Error EditorExportPlatformOSX::export_project(const Ref &p_p if (err == OK) { ep.step("Making PKG", 1); - if (use_dmg()) { + if (export_format == "dmg") { String pack_path = tmp_app_path_name + "/Contents/Resources/" + pkg_name + ".pck"; Vector shared_objects; err = save_pack(p_preset, pack_path, &shared_objects); diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp index 6a7284f7703..41e59a53522 100644 --- a/platform/uwp/export/export.cpp +++ b/platform/uwp/export/export.cpp @@ -1021,8 +1021,10 @@ public: return "UWP"; } - virtual String get_binary_extension(const Ref &p_preset) const { - return "appx"; + virtual List get_binary_extensions(const Ref &p_preset) const { + List list; + list.push_back("appx"); + return list; } virtual Ref get_logo() const {