request focus on password field for encrypted locked wallets when wallet window becomes active
@@ -12,6 +12,9 @@ import com.sparrowwallet.sparrow.io.Storage;
import javafx.application.Platform;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.beans.value.WeakChangeListener;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
@@ -48,8 +51,19 @@ public class WalletController extends WalletFormController implements Initializa
private BorderPane lockPane;
+ private CustomPasswordField passwordField;
+
private final BooleanProperty walletEncryptedProperty = new SimpleBooleanProperty(false);
+ private final ChangeListener<Boolean> lockFocusListener = new ChangeListener<>() {
+ @Override
+ public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
+ if(newValue && getWalletForm().isLocked() && passwordField != null && passwordField.isVisible()) {
+ passwordField.requestFocus();
+ }
+ }
+ };
+
@Override
public void initialize(URL location, ResourceBundle resources) {
EventManager.get().register(this);
@@ -148,7 +162,7 @@ public class WalletController extends WalletFormController implements Initializa
Label label = new Label("Enter password to unlock:");
label.managedProperty().bind(label.visibleProperty());
label.visibleProperty().bind(walletEncryptedProperty);
- CustomPasswordField passwordField = new ViewPasswordField();
+ passwordField = new ViewPasswordField();
passwordField.setMaxWidth(300);
passwordField.managedProperty().bind(passwordField.visibleProperty());
passwordField.visibleProperty().bind(walletEncryptedProperty);
@@ -165,6 +179,8 @@ public class WalletController extends WalletFormController implements Initializa
stackPane.getChildren().add(vBox);
lockPane.setCenter(stackPane);
walletPane.getChildren().add(lockPane);
+
+ walletPane.getScene().getWindow().focusedProperty().addListener(new WeakChangeListener<>(lockFocusListener));
}
private void unlockWallet(CustomPasswordField passwordField) {
