From d6ffb890e3159106ce44fe27e3599094a1db2e5c Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 10 Sep 2019 16:59:51 +0200 Subject: [PATCH] preparations for reacting to externally triggered requests to open a masterkey file --- .../cryptomator/launcher/FileOpenRequestHandler.java | 4 +--- .../java/org/cryptomator/ui/fxapp/FxApplication.java | 7 ++++++- .../ui/mainwindow/MainWindowComponent.java | 2 ++ .../ui/mainwindow/VaultListController.java | 12 ++++++++++-- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java b/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java index a2f9c901e..baab96128 100644 --- a/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java +++ b/main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java @@ -34,10 +34,8 @@ class FileOpenRequestHandler { @Inject public FileOpenRequestHandler(@Named("launchEventQueue") BlockingQueue launchEventQueue) { this.launchEventQueue = launchEventQueue; - try { + if (Desktop.getDesktop().isSupported(Desktop.Action.APP_OPEN_FILE)) { Desktop.getDesktop().setOpenFileHandler(this::openFiles); - } catch (UnsupportedOperationException e) { - LOG.info("Unable to setOpenFileHandler, probably not supported on this OS."); } } diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java index 3b096a75e..a755f91cc 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java @@ -26,6 +26,8 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.awt.desktop.QuitResponse; import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; @FxApplicationScoped public class FxApplication extends Application { @@ -87,12 +89,15 @@ public class FxApplication extends Application { }); } - public void showMainWindow() { + public CompletionStage showMainWindow() { + CompletableFuture future = new CompletableFuture<>(); Platform.runLater(() -> { Stage stage = mainWindow.get().showMainWindow(); addVisibleStage(stage); LOG.debug("Showing MainWindow"); + future.complete(stage); }); + return future; } public void showUnlockWindow(Vault vault) { diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowComponent.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowComponent.java index 65b06555d..d4e03fbfe 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowComponent.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowComponent.java @@ -25,7 +25,9 @@ public interface MainWindowComponent { default Stage showMainWindow() { Stage stage = window(); stage.setScene(scene().get()); + stage.setIconified(false); stage.show(); + stage.toFront(); stage.requestFocus(); return stage; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java index dcfa2fb46..12d63a025 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java @@ -7,6 +7,7 @@ import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.ListView; +import javafx.stage.Stage; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; import org.cryptomator.ui.common.FxController; @@ -21,6 +22,7 @@ public class VaultListController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(VaultListController.class); + private final Stage window; private final ObservableList vaults; private final ObjectProperty selectedVault; private final VaultListCellFactory cellFactory; @@ -31,7 +33,8 @@ public class VaultListController implements FxController { public ListView vaultList; @Inject - VaultListController(ObservableList vaults, ObjectProperty selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVault) { + VaultListController(@MainWindow Stage window, ObservableList vaults, ObjectProperty selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVault) { + this.window = window; this.vaults = vaults; this.selectedVault = selectedVault; this.cellFactory = cellFactory; @@ -48,7 +51,12 @@ public class VaultListController implements FxController { vaults.addListener((ListChangeListener.Change c) -> { // not threadsafe, but we can only add one vault at a time while (c.next()) { if (c.wasAdded()) { - vaultList.getSelectionModel().selectLast(); + Vault anyAddedVault = c.getAddedSubList().get(0); + vaultList.getSelectionModel().select(anyAddedVault); + window.setIconified(false); + window.show(); + window.toFront(); + window.requestFocus(); } } });