diff --git a/electrum/gui/qml/components/PasswordDialog.qml b/electrum/gui/qml/components/PasswordDialog.qml index 71a43d9a4..550f00b23 100644 --- a/electrum/gui/qml/components/PasswordDialog.qml +++ b/electrum/gui/qml/components/PasswordDialog.qml @@ -14,8 +14,10 @@ ElDialog { iconSource: Qt.resolvedUrl('../../icons/lock.png') property bool confirmPassword: false - property string password property string infotext + property string errorMessage + + signal passwordEntered(string password) anchors.centerIn: parent width: parent.width * 4/5 @@ -84,6 +86,16 @@ ElDialog { password: pw_1.text } } + + Label { + Layout.maximumWidth: parent.width + Layout.alignment: Qt.AlignHCenter + text: errorMessage + wrapMode: Text.Wrap + visible: errorMessage + color: constants.colorError + font.pixelSize: constants.fontSizeLarge + } } FlatButton { @@ -92,10 +104,13 @@ ElDialog { icon.source: '../../icons/confirmed.png' enabled: confirmPassword ? pw_1.text.length >= 6 && pw_1.text == pw_2.text : true onClicked: { - password = pw_1.text - passworddialog.doAccept() + passwordEntered(pw_1.text) } } } + function clearPassword() { + pw_1.text = "" + pw_2.text = "" + } } diff --git a/electrum/gui/qml/components/WalletDetails.qml b/electrum/gui/qml/components/WalletDetails.qml index a86cce3dd..8522c42b2 100644 --- a/electrum/gui/qml/components/WalletDetails.qml +++ b/electrum/gui/qml/components/WalletDetails.qml @@ -473,12 +473,13 @@ Pane { title: qsTr('Enter new password'), infotext: qsTr('If you forget your password, you\'ll need to restore from seed. Please make sure you have your seed stored safely') }) - dialog.accepted.connect(function() { - var success = Daemon.setPassword(dialog.password) + dialog.passwordEntered.connect(function(password) { + dialog.close() + var success = Daemon.setPassword(password) if (success && Biometrics.isEnabled) { if (Biometrics.isAvailable) { // also update the biometric authentication - Biometrics.enable(dialog.password) + Biometrics.enable(password) } else { // disable biometric authentication as it is not available Biometrics.disable() @@ -538,23 +539,25 @@ Pane { ? "\n\n" + qsTr('The new password needs to match the password of any other existing wallet.') : "") }) - dialog.accepted.connect(function() { + dialog.passwordEntered.connect(function(password) { if (Config.walletShouldUseSinglePassword // android && Daemon.availableWallets.rowCount() > 1 // has more than one wallet - && Daemon.numWalletsWithPassword(dialog.password) < 1 // no other wallet uses this new password + && Daemon.numWalletsWithPassword(password) < 1 // no other wallet uses this new password ) { - var success = false - var error_msg = [ + dialog.errorMessage = [ qsTr('You need to use the password of any other existing wallet.'), qsTr('Using different wallet passwords is not supported.'), ].join("\n") + dialog.clearPassword() + return } else { - var success = Daemon.currentWallet.setPassword(dialog.password) + var success = Daemon.currentWallet.setPassword(password) if (success && Config.walletShouldUseSinglePassword) { - Daemon.singlePassword = dialog.password + Daemon.singlePassword = password } var error_msg = qsTr('Password change failed') } + dialog.close() if (success && Biometrics.isEnabled) { // unlikely to happen as this means the user somehow moved from // a unified password to differing passwords diff --git a/electrum/gui/qml/components/main.qml b/electrum/gui/qml/components/main.qml index 5a5fb5875..420213092 100644 --- a/electrum/gui/qml/components/main.qml +++ b/electrum/gui/qml/components/main.qml @@ -852,11 +852,13 @@ ApplicationWindow // 'payment_auth' should have been converted to 'wallet' at this point if (method === 'wallet' || method === 'wallet_password_only') { var dialog = app.passwordDialog.createObject(app, authMessage ? {'title': authMessage} : {}) - dialog.accepted.connect(function() { - if (Daemon.currentWallet.verifyPassword(dialog.password)) { + dialog.passwordEntered.connect(function(password) { + if (Daemon.currentWallet.verifyPassword(password)) { + dialog.close() qtobject.authProceed() } else { - qtobject.authCancel() + dialog.clearPassword() + dialog.errorMessage = qsTr("Invalid Password") } }) dialog.rejected.connect(function() {