From 7393f655858a8e22dce957b633f843c8e7b65d02 Mon Sep 17 00:00:00 2001 From: ToobLac Date: Sat, 5 Sep 2026 11:21:50 +0800 Subject: [PATCH] cmd+w --- .../java/org/jackhuang/hmcl/ui/CrashWindow.java | 2 ++ .../java/org/jackhuang/hmcl/ui/FXUtils.java | 17 +++++++++++++---- .../org/jackhuang/hmcl/ui/GameCrashWindow.java | 2 ++ .../java/org/jackhuang/hmcl/ui/LogWindow.java | 2 ++ 4 files changed, 19 insertions(+), 4 deletions(-) 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 5af27b6a601..e22f32ae9c9 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 90a2c3111b5..91c1cc0ad98 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 bcd117dbb32..380357070c9 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 1a382e04c78..6ac9d2daf2b 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) {