From 155ba4607b097e75c99af2a1e9b489c9202ebe7a Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Fri, 16 Feb 2024 15:24:52 +0100 Subject: [PATCH 1/3] introduced functionality to center the unlock screen within the main application window --- .../org/cryptomator/ui/unlock/UnlockWorkflow.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java index 98a49dec5..df7371da1 100644 --- a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java +++ b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java @@ -11,6 +11,7 @@ import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.common.VaultService; import org.cryptomator.ui.fxapp.FxApplicationWindows; +import org.cryptomator.ui.fxapp.PrimaryStage; import org.cryptomator.ui.keyloading.KeyLoadingStrategy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +22,7 @@ import javafx.beans.property.ObjectProperty; import javafx.concurrent.Task; import javafx.scene.Scene; import javafx.stage.Stage; +import javafx.stage.Window; import java.io.IOException; /** @@ -33,6 +35,7 @@ public class UnlockWorkflow extends Task { private static final Logger LOG = LoggerFactory.getLogger(UnlockWorkflow.class); + private final Stage mainWindow; private final Stage window; private final Vault vault; private final VaultService vaultService; @@ -44,7 +47,8 @@ public class UnlockWorkflow extends Task { private final ObjectProperty illegalMountPointException; @Inject - UnlockWorkflow(@UnlockWindow Stage window, // + UnlockWorkflow(@PrimaryStage Stage mainWindow, // + @UnlockWindow Stage window, // @UnlockWindow Vault vault, // VaultService vaultService, // @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy successScene, // @@ -53,6 +57,7 @@ public class UnlockWorkflow extends Task { FxApplicationWindows appWindows, // @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, // @UnlockWindow ObjectProperty illegalMountPointException) { + this.mainWindow = mainWindow; this.window = window; this.vault = vault; this.vaultService = vaultService; @@ -99,6 +104,13 @@ public class UnlockWorkflow extends Task { appWindows.showErrorWindow(e, window, null); } + private void centerOnPrimaryStage(Window window){ + double centerXPosition = mainWindow.getX() + (mainWindow.getWidth() - window.getWidth()) / 2; + double centerYPosition = mainWindow.getY() + (mainWindow.getHeight() - window.getHeight()) / 2; + window.setX(centerXPosition); + window.setY(centerYPosition); + } + @Override protected void succeeded() { LOG.info("Unlock of '{}' succeeded.", vault.getDisplayName()); @@ -107,6 +119,7 @@ public class UnlockWorkflow extends Task { case ASK -> Platform.runLater(() -> { window.setScene(successScene.get()); window.show(); + centerOnPrimaryStage(window); }); case REVEAL -> { Platform.runLater(window::close); From f4007267fbc53126b3e7f853b6ed29053b79c98b Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Fri, 16 Feb 2024 17:31:20 +0100 Subject: [PATCH 2/3] simplified the code and removed the function --- .../java/org/cryptomator/ui/unlock/UnlockWorkflow.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java index df7371da1..78166a939 100644 --- a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java +++ b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java @@ -104,13 +104,6 @@ public class UnlockWorkflow extends Task { appWindows.showErrorWindow(e, window, null); } - private void centerOnPrimaryStage(Window window){ - double centerXPosition = mainWindow.getX() + (mainWindow.getWidth() - window.getWidth()) / 2; - double centerYPosition = mainWindow.getY() + (mainWindow.getHeight() - window.getHeight()) / 2; - window.setX(centerXPosition); - window.setY(centerYPosition); - } - @Override protected void succeeded() { LOG.info("Unlock of '{}' succeeded.", vault.getDisplayName()); @@ -119,7 +112,8 @@ public class UnlockWorkflow extends Task { case ASK -> Platform.runLater(() -> { window.setScene(successScene.get()); window.show(); - centerOnPrimaryStage(window); + window.setX(mainWindow.getX() + (mainWindow.getWidth() - window.getWidth()) / 2); + window.setY(mainWindow.getY() + (mainWindow.getHeight() - window.getHeight()) / 2); }); case REVEAL -> { Platform.runLater(window::close); From 829b64cd3dc40dd2984570d1b5dbb2926e1170ef Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Mon, 19 Feb 2024 08:55:16 +0100 Subject: [PATCH 3/3] dialog centers on main app screen if mainWindow is hidden --- .../org/cryptomator/ui/unlock/UnlockWorkflow.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java index 78166a939..4215af2bc 100644 --- a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java +++ b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java @@ -20,9 +20,10 @@ import javax.inject.Inject; import javafx.application.Platform; import javafx.beans.property.ObjectProperty; import javafx.concurrent.Task; +import javafx.geometry.Rectangle2D; import javafx.scene.Scene; +import javafx.stage.Screen; import javafx.stage.Stage; -import javafx.stage.Window; import java.io.IOException; /** @@ -112,8 +113,16 @@ public class UnlockWorkflow extends Task { case ASK -> Platform.runLater(() -> { window.setScene(successScene.get()); window.show(); - window.setX(mainWindow.getX() + (mainWindow.getWidth() - window.getWidth()) / 2); - window.setY(mainWindow.getY() + (mainWindow.getHeight() - window.getHeight()) / 2); + double x = mainWindow.getX() + (mainWindow.getWidth() - window.getWidth()) / 2; + double y = mainWindow.getY() + (mainWindow.getHeight() - window.getHeight()) / 2; + if(!mainWindow.isShowing()) { + Screen screen = Screen.getScreensForRectangle(mainWindow.getX(), mainWindow.getY(), mainWindow.getWidth(), mainWindow.getHeight()).get(0); + Rectangle2D bounds = screen.getVisualBounds(); + x = bounds.getMinX() + (bounds.getWidth() - window.getWidth()) / 2; + y = bounds.getMinY() + (bounds.getHeight() - window.getHeight()) / 2; + } + window.setX(x); + window.setY(y); }); case REVEAL -> { Platform.runLater(window::close);