diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java index 5af27b6a60..e22f32ae9c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java @@ -72,6 +72,8 @@ else if (UpdateChecker.isOutdated()) FXUtils.setIcon(this); setTitle(i18n("message.error")); + FXUtils.addMacOSCloseWindowHandler(this, null); + setOnCloseRequest(e -> javafx.application.Platform.exit()); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 90a2c3111b..91c1cc0ad9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -109,10 +109,7 @@ import java.nio.file.PathMatcher; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.ToIntFunction; +import java.util.function.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1200,6 +1197,18 @@ public static void onSecondaryButtonClicked(Node node, Runnable action) { }); } + public static void addMacOSCloseWindowHandler(Stage stage, @Nullable Supplier restriction) { + stage.addEventHandler(KeyEvent.KEY_PRESSED, event -> { + if (OperatingSystem.CURRENT_OS == OperatingSystem.MACOS + && event.isMetaDown() + && event.getCode() == KeyCode.W + && (restriction == null || restriction.get())) { + stage.close(); + event.consume(); + } + }); + } + public static N prepareNode(N node) { Scene dummyScene = new Scene(node); StyleSheets.init(dummyScene); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java index bcd117dbb3..380357070c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java @@ -114,6 +114,8 @@ public GameCrashWindow(ManagedProcess managedProcess, ProcessListener.ExitType e setTitle(i18n("game.crash.title")); FXUtils.setIcon(this); + FXUtils.addMacOSCloseWindowHandler(this, null); + analyzeCrashReport(); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 1a382e04c7..6ac9d2daf2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -100,6 +100,8 @@ public LogWindow(ManagedProcess gameProcess, CircularArrayList logs) { } this.gameProcess = gameProcess; + + FXUtils.addMacOSCloseWindowHandler(this, () -> !gameProcess.isRunning()); } public void logLine(Log log) {