From 3629617d36b18044ece679691bd874658c546bf6 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Wed, 3 Feb 2021 17:16:38 +0100 Subject: [PATCH 1/2] Import zip via drag and drop in project manager. Dropping a single ZIP file in the project manager will now prompt the import dialog. --- editor/project_manager.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 0f5fe32e7849..71608f934655 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -2326,6 +2326,11 @@ void ProjectManager::_install_project(const String &p_zip_path, const String &p_ } void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) { + if (p_files.size() == 1 && p_files[0].ends_with(".zip")) { + const String file = p_files[0].get_file(); + _install_project(p_files[0], file.substr(0, file.length() - 4).capitalize()); + return; + } Set folders_set; DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); for (int i = 0; i < p_files.size(); i++) { From 2668ca7a8c680603060ebe3d1806f41cb7bc015e Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Wed, 3 Feb 2021 17:18:28 +0100 Subject: [PATCH 2/2] [HTML5] Make home path persistent in editor. We used to only persist specific sub-folder of /home/web_user/ when running the Web Editor. This resulted in bad UX about default project creation path etc. This PR makes the whole folder persistent, move the zip preloading to a different folder (to avoid persisting it), and automatically prompt the user to import it if present. --- misc/dist/html/editor.html | 6 +++--- platform/javascript/javascript_main.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html index 40afe6528c96..f51aba2cad34 100644 --- a/misc/dist/html/editor.html +++ b/misc/dist/html/editor.html @@ -327,7 +327,7 @@ function startEditor(zip) { const INDETERMINATE_STATUS_STEP_MS = 100; - const persistentPaths = ['/home/web_user/.config', '/home/web_user/.cache', '/home/web_user/projects']; + const persistentPaths = ['/home/web_user/']; var editorCanvas = document.getElementById('editor-canvas'); var gameCanvas = document.getElementById('game-canvas'); @@ -498,11 +498,11 @@ engine.setUnloadAfterInit(false); // Don't want to reload when starting game. engine.init('godot.tools').then(function() { if (zip) { - engine.copyToFS("/home/web_user/preload.zip", zip); + engine.copyToFS("/tmp/preload.zip", zip); } try { // Avoid user creating project in the persistent root folder. - engine.copyToFS("/home/web_user/projects/keep", new Uint8Array()); + engine.copyToFS("/home/web_user/keep", new Uint8Array()); } catch(e) { // File exists } diff --git a/platform/javascript/javascript_main.cpp b/platform/javascript/javascript_main.cpp index 6f2a8c81589b..e1fba262de61 100644 --- a/platform/javascript/javascript_main.cpp +++ b/platform/javascript/javascript_main.cpp @@ -87,6 +87,13 @@ extern EMSCRIPTEN_KEEPALIVE int godot_js_main(int argc, char *argv[]) { ResourceLoader::set_abort_on_missing_resources(false); Main::start(); os->get_main_loop()->init(); +#ifdef TOOLS_ENABLED + if (Main::is_project_manager() && FileAccess::exists("/tmp/preload.zip")) { + PoolStringArray ps; + ps.push_back("/tmp/preload.zip"); + os->get_main_loop()->emit_signal("files_dropped", ps, -1); + } +#endif emscripten_set_main_loop(main_loop_callback, -1, false); // Immediately run the first iteration. // We are inside an animation frame, we want to immediately draw on the newly setup canvas.