diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorSkin.java index e2047009c..a4a5be60f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorSkin.java @@ -55,7 +55,9 @@ public class DecoratorSkin extends SkinBase { private final Stage primaryStage; private final TransitionPane navBarPane; + @SuppressWarnings("FieldCanBeLocal") private final InvalidationListener onWindowsStatusChange; + private final EventHandler onTitleBarDoubleClick; private double mouseInitX, mouseInitY, stageInitX, stageInitY, stageInitWidth, stageInitHeight; @@ -104,6 +106,12 @@ public class DecoratorSkin extends SkinBase { root.addEventFilter(MouseEvent.MOUSE_MOVED, onMouseMoved); } }; + onTitleBarDoubleClick = event -> { + if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) { + primaryStage.setMaximized(!primaryStage.isMaximized()); + event.consume(); + } + }; WeakInvalidationListener weakOnWindowsStatusChange = new WeakInvalidationListener(onWindowsStatusChange); primaryStage.iconifiedProperty().addListener(weakOnWindowsStatusChange); primaryStage.maximizedProperty().addListener(weakOnWindowsStatusChange); @@ -111,6 +119,7 @@ public class DecoratorSkin extends SkinBase { onWindowsStatusChange.invalidated(null); } else { onWindowsStatusChange = null; + onTitleBarDoubleClick = null; root.addEventFilter(MouseEvent.MOUSE_RELEASED, onMouseReleased); root.addEventFilter(MouseEvent.MOUSE_DRAGGED, onMouseDragged); root.addEventFilter(MouseEvent.MOUSE_MOVED, onMouseMoved); @@ -188,16 +197,6 @@ public class DecoratorSkin extends SkinBase { BorderPane titleBar = new BorderPane(); titleContainer.getChildren().add(titleBar); - // https://github.com/HMCL-dev/HMCL/issues/4290 - if (OperatingSystem.CURRENT_OS != OperatingSystem.MACOS) { - titleBar.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { - if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) { - primaryStage.setMaximized(!primaryStage.isMaximized()); - event.consume(); - } - }); - } - Rectangle buttonsContainerPlaceHolder = new Rectangle(); { navBarPane = new TransitionPane(); @@ -324,6 +323,8 @@ public class DecoratorSkin extends SkinBase { BorderPane.setAlignment(titleNode, Pos.CENTER_LEFT); BorderPane.setMargin(titleNode, new Insets(0, 0, 0, 8)); } + if (onTitleBarDoubleClick != null) + center.setOnMouseClicked(onTitleBarDoubleClick); navBar.setCenter(center); if (canRefresh) {