Prechádzať zdrojové kódy

preparations for reacting to externally triggered requests to open a masterkey file

Sebastian Stenzel 5 rokov pred
rodič
commit
d6ffb890e3

+ 1 - 3
main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java

@@ -34,10 +34,8 @@ class FileOpenRequestHandler {
 	@Inject
 	public FileOpenRequestHandler(@Named("launchEventQueue") BlockingQueue<AppLaunchEvent> 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.");
 		}
 	}
 

+ 6 - 1
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<Stage> showMainWindow() {
+		CompletableFuture<Stage> 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) {

+ 2 - 0
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;
 	}

+ 10 - 2
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<Vault> vaults;
 	private final ObjectProperty<Vault> selectedVault;
 	private final VaultListCellFactory cellFactory;
@@ -31,7 +33,8 @@ public class VaultListController implements FxController {
 	public ListView<Vault> vaultList;
 
 	@Inject
-	VaultListController(ObservableList<Vault> vaults, ObjectProperty<Vault> selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVault) {
+	VaultListController(@MainWindow Stage window, ObservableList<Vault> vaults, ObjectProperty<Vault> 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<? extends Vault> 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();
 				}
 			}
 		});