From e7d7890891af0c6eede925e82014e3e5e5211675 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 27 May 2024 17:27:26 -0400 Subject: [PATCH] Fixes --- build.gradle | 2 +- core/src/mindustry/core/Platform.java | 43 +++++++++++++++- .../mindustry/desktop/DesktopLauncher.java | 51 ------------------- 3 files changed, 43 insertions(+), 53 deletions(-) diff --git a/build.gradle b/build.gradle index d68db91465..9bca8edb25 100644 --- a/build.gradle +++ b/build.gradle @@ -234,7 +234,6 @@ project(":desktop"){ dependencies{ implementation project(":core") implementation arcModule("extensions:discord") - implementation arcModule("extensions:filedialogs") implementation arcModule("natives:natives-filedialogs") implementation arcModule("natives:natives-desktop") implementation arcModule("natives:natives-freetype-desktop") @@ -322,6 +321,7 @@ project(":core"){ api arcModule("extensions:g3d") api arcModule("extensions:fx") api arcModule("extensions:arcnet") + implementation arcModule("extensions:filedialogs") api "com.github.Anuken:rhino:$rhinoVersion" if(localArc && debugged()) api arcModule("extensions:recorder") if(localArc) api arcModule(":extensions:packer") diff --git a/core/src/mindustry/core/Platform.java b/core/src/mindustry/core/Platform.java index 73e65615be..0cbc9869eb 100644 --- a/core/src/mindustry/core/Platform.java +++ b/core/src/mindustry/core/Platform.java @@ -1,6 +1,7 @@ package mindustry.core; import arc.*; +import arc.filedialogs.*; import arc.files.*; import arc.func.*; import arc.math.*; @@ -141,7 +142,47 @@ public interface Platform{ * @param title The title of the native dialog */ default void showFileChooser(boolean open, String title, String extension, Cons cons){ - if(OS.isLinux && !OS.isAndroid){ + if(OS.isWindows || OS.isMac){ + //native file dialog + Threads.daemon(() -> { + try{ + FileDialogs.loadNatives(); + + String result; + + if(open){ + result = FileDialogs.openFileDialog(title, FileChooser.getLastDirectory().absolutePath(), new String[]{"*." + extension}, "." + extension + " files", false); + }else{ + result = FileDialogs.saveFileDialog(title, FileChooser.getLastDirectory().absolutePath(), new String[]{"*." + extension}, "." + extension + " files"); + } + + if(result == null) return; + + if(result.length() > 1 && result.contains("\n")){ + result = result.split("\n")[0]; + } + + //cancelled selection, ignore result + if(result.isEmpty() || result.equals("\n")) return; + if(result.endsWith("\n")) result = result.substring(0, result.length() - 1); + if(result.contains("\n")) throw new IOException("invalid input: \"" + result + "\""); + + Fi file = Core.files.absolute(result); + Core.app.post(() -> { + FileChooser.setLastDirectory(file.isDirectory() ? file : file.parent()); + + if(!open){ + cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension)); + }else{ + cons.get(file); + } + }); + }catch(Throwable error){ + Log.err("Failure to execute native file chooser", error); + Core.app.post(() -> defaultFileDialog(open, title, extension, cons)); + } + }); + }else if(OS.isLinux && !OS.isAndroid){ showZenity(open, title, new String[]{extension}, cons, () -> defaultFileDialog(open, title, extension, cons)); }else{ defaultFileDialog(open, title, extension, cons); diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index 21ba0f4e5d..44f3b5b03f 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -6,7 +6,6 @@ import arc.backend.sdl.*; import arc.backend.sdl.jni.*; import arc.discord.*; import arc.discord.DiscordRPC.*; -import arc.filedialogs.*; import arc.files.*; import arc.func.*; import arc.math.*; @@ -24,7 +23,6 @@ import mindustry.net.*; import mindustry.net.Net.*; import mindustry.service.*; import mindustry.type.*; -import mindustry.ui.dialogs.*; import java.io.*; @@ -38,55 +36,6 @@ public class DesktopLauncher extends ClientLauncher{ public static void main(String[] arg){ try{ Vars.loadLogger(); - Vars.platform = new Platform(){ - @Override - public void showFileChooser(boolean open, String title, String extension, Cons cons){ - if(OS.isWindows || OS.isMac){ - Threads.daemon(() -> { - try{ - FileDialogs.loadNatives(); - - String result; - - if(open){ - result = FileDialogs.openFileDialog(title, FileChooser.getLastDirectory().absolutePath(), new String[]{"*." + extension}, "." + extension + " files", false); - }else{ - result = FileDialogs.saveFileDialog(title, FileChooser.getLastDirectory().absolutePath(), new String[]{"*." + extension}, "." + extension + " files"); - } - - if(result == null) return; - - if(result.length() > 1 && result.contains("\n")){ - result = result.split("\n")[0]; - } - - //cancelled selection, ignore result - if(result.isEmpty() || result.equals("\n")) return; - if(result.endsWith("\n")) result = result.substring(0, result.length() - 1); - if(result.contains("\n")) throw new IOException("invalid input: \"" + result + "\""); - - Fi file = Core.files.absolute(result); - Core.app.post(() -> { - FileChooser.setLastDirectory(file.isDirectory() ? file : file.parent()); - - if(!open){ - cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension)); - }else{ - cons.get(file); - } - }); - }catch(Throwable error){ - Log.err("Failure to execute native file chooser", error); - Core.app.post(() -> { - Platform.super.showFileChooser(open, title, extension, cons); - }); - } - }); - }else{ - Platform.super.showFileChooser(open, title, extension, cons); - } - } - }; new SdlApplication(new DesktopLauncher(arg), new SdlConfig(){{ title = "Mindustry"; maximized = true;