aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qt/askpassphrasedialog.cpp53
-rw-r--r--src/qt/askpassphrasedialog.h3
-rw-r--r--src/qt/forms/askpassphrasedialog.ui17
3 files changed, 71 insertions, 2 deletions
diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp
index 24f622d637..f516169460 100644
--- a/src/qt/askpassphrasedialog.cpp
+++ b/src/qt/askpassphrasedialog.cpp
@@ -6,17 +6,25 @@
#include <QMessageBox>
#include <QPushButton>
+#include <QKeyEvent>
AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) :
QDialog(parent),
ui(new Ui::AskPassphraseDialog),
mode(mode),
- model(0)
+ model(0),
+ fCapsLock(false)
{
ui->setupUi(this);
ui->passEdit1->setMaxLength(MAX_PASSPHRASE_SIZE);
ui->passEdit2->setMaxLength(MAX_PASSPHRASE_SIZE);
ui->passEdit3->setMaxLength(MAX_PASSPHRASE_SIZE);
+
+ // Setup Caps Lock detection.
+ ui->passEdit1->installEventFilter(this);
+ ui->passEdit2->installEventFilter(this);
+ ui->passEdit3->installEventFilter(this);
+ ui->capsLabel->clear();
switch(mode)
{
@@ -188,3 +196,46 @@ void AskPassphraseDialog::textChanged()
}
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(acceptable);
}
+
+bool AskPassphraseDialog::event(QEvent *event)
+{
+ // Detect Caps Lock key press.
+ if (event->type() == QEvent::KeyPress) {
+ QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ if (ke->key() == Qt::Key_CapsLock) {
+ fCapsLock = !fCapsLock;
+ }
+ if (fCapsLock) {
+ ui->capsLabel->setText(tr("Warning: The Caps Lock key is on."));
+ } else {
+ ui->capsLabel->clear();
+ }
+ }
+ return QWidget::event(event);
+}
+
+bool AskPassphraseDialog::eventFilter(QObject *, QEvent *event)
+{
+ /* Detect Caps Lock.
+ * There is no good OS-independent way to check a key state in Qt, but we
+ * can detect Caps Lock by checking for the following condition:
+ * Shift key is down and the result is a lower case character, or
+ * Shift key is not down and the result is an upper case character.
+ */
+ if (event->type() == QEvent::KeyPress) {
+ QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ QString str = ke->text();
+ if (str.length() != 0) {
+ const QChar *psz = str.unicode();
+ bool fShift = (ke->modifiers() & Qt::ShiftModifier) != 0;
+ if ((fShift && psz->isLower()) || (!fShift && psz->isUpper())) {
+ fCapsLock = true;
+ ui->capsLabel->setText(tr("Warning: The Caps Lock key is on."));
+ } else if (psz->isLetter()) {
+ fCapsLock = false;
+ ui->capsLabel->clear();
+ }
+ }
+ }
+ return false;
+}
diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h
index 32a3f6a5f3..b500ff49bf 100644
--- a/src/qt/askpassphrasedialog.h
+++ b/src/qt/askpassphrasedialog.h
@@ -34,9 +34,12 @@ private:
Ui::AskPassphraseDialog *ui;
Mode mode;
WalletModel *model;
+ bool fCapsLock;
private slots:
void textChanged();
+ bool event(QEvent *event);
+ bool eventFilter(QObject *, QEvent *event);
};
#endif // ASKPASSPHRASEDIALOG_H
diff --git a/src/qt/forms/askpassphrasedialog.ui b/src/qt/forms/askpassphrasedialog.ui
index 70d9180e75..f1f2ef3731 100644
--- a/src/qt/forms/askpassphrasedialog.ui
+++ b/src/qt/forms/askpassphrasedialog.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>589</width>
- <height>228</height>
+ <height>239</height>
</rect>
</property>
<property name="sizePolicy">
@@ -83,6 +83,21 @@
</property>
</widget>
</item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="capsLabel">
+ <property name="styleSheet">
+ <string notr="true">#capsLabel {
+ font: bold;
+}</string>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>