PasswordDialog: add CAPSLOCK checking

pull/2/head
mmbyday 6 years ago
parent d4d8ff54e6
commit 5dbcd714ea

@ -34,6 +34,7 @@ import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.0
import "../components" as MoneroComponents
import "../js/Utils.js" as Utils
Item {
id: root
@ -44,6 +45,9 @@ Item {
property alias password: passwordInput.text
property string walletName
property string errorText
property bool shiftIsPressed: false
property bool isCapsLocksActive: false
property bool backspaceIsPressed: false
// same signals as Dialog has
signal accepted()
@ -51,9 +55,11 @@ Item {
signal closeCallback()
function open(walletName, errorText) {
passwordInput.text = ""
passwordInput.forceActiveFocus();
inactiveOverlay.visible = true // draw appwindow inactive
root.walletName = walletName ? walletName : ""
root.errorText = errorText ? errorText : "";
errorTextLabel.text = errorText ? errorText : "";
leftPanel.enabled = false
middlePanel.enabled = false
titleBar.enabled = false
@ -104,8 +110,8 @@ Item {
}
Label {
text: root.errorText
visible: root.errorText
id: errorTextLabel
visible: root.errorText || text !== ""
color: MoneroComponents.Style.errorColor
font.pixelSize: 16 * scaleRatio
@ -131,6 +137,17 @@ Item {
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
onTextChanged: {
var letter = text[passwordInput.text.length - 1];
isCapsLocksActive = Utils.isUpperLock(shiftIsPressed, letter);
if(isCapsLocksActive && !backspaceIsPressed){
errorTextLabel.text = qsTr("CAPSLOCKS IS ON.") + translationManager.emptyString;
}
else{
errorTextLabel.text = "";
}
}
background: Rectangle {
radius: 2
border.color: Qt.rgba(255, 255, 255, 0.35)
@ -172,12 +189,26 @@ Item {
Keys.onReturnPressed: {
root.close()
root.accepted()
}
Keys.onEscapePressed: {
root.close()
root.rejected()
}
Keys.onPressed: {
if(event.key === Qt.Key_Shift){
shiftIsPressed = true;
}
if(event.key === Qt.Key_Backspace){
backspaceIsPressed = true;
}
}
Keys.onReleased: {
if(event.key === Qt.Key_Shift){
shiftIsPressed = false;
}
if(event.key === Qt.Key_Backspace){
backspaceIsPressed =false;
}
}
}

@ -107,3 +107,22 @@ function filterNodes(nodes, port) {
function epoch(){
return Math.floor((new Date).getTime()/1000);
}
function isAlpha(letter){ return letter.match(/^[A-Za-z0-9]+$/) !== null; }
function isLowerCaseChar(letter){ return letter === letter.toLowerCase(); }
function isUpperLock(shift, letter){
if(!isAlpha((letter))) return false;
if(shift) {
if(isLowerCaseChar(letter))
return true;
else
return false;
} else {
if(isLowerCaseChar(letter))
return false;
else
return true;
}
}