From a52adc1871e4e6f5e4316b43552f456f87cd5462 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 24 Nov 2017 20:16:16 +0100 Subject: [PATCH] request focus on password field after selecting a vault --- .../controllers/ChangePasswordController.java | 5 +++++ .../ui/controllers/InitializeController.java | 5 +++++ .../ui/controllers/MainController.java | 19 +++++++++++++++++++ .../ui/controllers/UnlockController.java | 5 +++++ .../ui/controllers/UpgradeController.java | 5 +++++ .../ui/controllers/ViewController.java | 4 ++++ 6 files changed, 43 insertions(+) diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java index 3c4f03dd8..12a838139 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java @@ -119,6 +119,11 @@ public class ChangePasswordController implements ViewController { return root; } + @Override + public void focus() { + oldPasswordField.requestFocus(); + } + void setVault(Vault vault) { this.vault = Objects.requireNonNull(vault); // trigger "default" change to refresh key bindings: diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java index 38e905bcb..5c7c0dc5f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java @@ -105,6 +105,11 @@ public class InitializeController implements ViewController { return root; } + @Override + public void focus() { + passwordField.requestFocus(); + } + void setVault(Vault vault) { this.vault = Objects.requireNonNull(vault); // trigger "default" change to refresh key bindings: diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java index e610d7aad..6ffadadd9 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java @@ -72,6 +72,9 @@ import javafx.scene.control.ListView; import javafx.scene.control.MenuItem; import javafx.scene.control.ToggleButton; import javafx.scene.image.Image; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.text.Font; @@ -165,6 +168,7 @@ public class MainController implements ViewController { @Override public void initialize() { vaultList.setItems(vaults); + vaultList.setOnKeyPressed(this::didPressKeyOnList); vaultList.setCellFactory(this::createDirecoryListCell); activeController.set(viewControllerLoader.load("/fxml/welcome.fxml")); selectedVault.bind(vaultList.getSelectionModel().selectedItemProperty()); @@ -239,6 +243,7 @@ public class MainController implements ViewController { private ListCell createDirecoryListCell(ListView param) { final DirectoryListCell cell = new DirectoryListCell(); cell.setVaultContextMenu(vaultListCellContextMenu); + cell.setOnMouseClicked(this::didClickOnListCell); return cell; } @@ -393,6 +398,19 @@ public class MainController implements ViewController { } } + private void didPressKeyOnList(KeyEvent e) { + if (e.getCode() == KeyCode.ENTER || e.getCode() == KeyCode.SPACE) { + activeController.get().focus(); + } + } + + private void didClickOnListCell(MouseEvent e) { + if (MouseEvent.MOUSE_CLICKED.equals(e.getEventType()) && e.getSource() instanceof DirectoryListCell) { + assert ((DirectoryListCell) e.getSource()).isSelected() : "click event occurs after mousedown, which causes selection of cell"; + activeController.get().focus(); + } + } + // **************************************** // Public Bindings // **************************************** @@ -471,6 +489,7 @@ public class MainController implements ViewController { ctrl.setVault(selectedVault.get()); ctrl.setListener(this::didChangePassword); activeController.set(ctrl); + Platform.runLater(ctrl::focus); } public void didChangePassword() { diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java index 95fb5ed1d..6d30a7e2f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java @@ -155,6 +155,11 @@ public class UnlockController implements ViewController { return root; } + @Override + public void focus() { + passwordField.requestFocus(); + } + void setVault(Vault vault) { vaultSubs.unsubscribe(); vaultSubs = Subscription.EMPTY; diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java index aafd46085..2d7cb7fa9 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UpgradeController.java @@ -84,6 +84,11 @@ public class UpgradeController implements ViewController { return root; } + @Override + public void focus() { + passwordField.requestFocus(); + } + void setVault(Vault vault) { this.vault = Objects.requireNonNull(vault); errorLabel.setText(null); diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/ViewController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/ViewController.java index 1d27a0598..1f1ef817e 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/ViewController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/ViewController.java @@ -24,4 +24,8 @@ public interface ViewController extends Initializable { // no-op } + default void focus() { + // no-op + } + }