aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qt/editaddressdialog.cpp4
-rw-r--r--src/qt/guiutil.cpp11
-rw-r--r--src/qt/guiutil.h13
-rw-r--r--src/qt/optionsdialog.cpp4
4 files changed, 32 insertions, 0 deletions
diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp
index f26a31158e..6e7520e018 100644
--- a/src/qt/editaddressdialog.cpp
+++ b/src/qt/editaddressdialog.cpp
@@ -39,6 +39,10 @@ EditAddressDialog::EditAddressDialog(Mode _mode, QWidget *parent) :
mapper = new QDataWidgetMapper(this);
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
+
+ GUIUtil::ItemDelegate* delegate = new GUIUtil::ItemDelegate(mapper);
+ connect(delegate, &GUIUtil::ItemDelegate::keyEscapePressed, this, &EditAddressDialog::reject);
+ mapper->setItemDelegate(delegate);
}
EditAddressDialog::~EditAddressDialog()
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index 9dde2c392c..955f5cdfe3 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -49,6 +49,7 @@
#include <QDoubleValidator>
#include <QFileDialog>
#include <QFont>
+#include <QKeyEvent>
#include <QLineEdit>
#include <QSettings>
#include <QTextDocument> // for Qt::mightBeRichText
@@ -927,4 +928,14 @@ void ClickableProgressBar::mouseReleaseEvent(QMouseEvent *event)
Q_EMIT clicked(event->pos());
}
+bool ItemDelegate::eventFilter(QObject *object, QEvent *event)
+{
+ if (event->type() == QEvent::KeyPress) {
+ if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
+ Q_EMIT keyEscapePressed();
+ }
+ }
+ return QItemDelegate::eventFilter(object, event);
+}
+
} // namespace GUIUtil
diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
index 6aa65369fa..5b32f03aaf 100644
--- a/src/qt/guiutil.h
+++ b/src/qt/guiutil.h
@@ -10,6 +10,7 @@
#include <QEvent>
#include <QHeaderView>
+#include <QItemDelegate>
#include <QMessageBox>
#include <QObject>
#include <QProgressBar>
@@ -232,6 +233,18 @@ namespace GUIUtil
typedef ClickableProgressBar ProgressBar;
+ class ItemDelegate : public QItemDelegate
+ {
+ Q_OBJECT
+ public:
+ ItemDelegate(QObject* parent) : QItemDelegate(parent) {}
+
+ Q_SIGNALS:
+ void keyEscapePressed();
+
+ private:
+ bool eventFilter(QObject *object, QEvent *event);
+ };
} // namespace GUIUtil
#endif // BITCOIN_QT_GUIUTIL_H
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index a57343f036..eea9a882b1 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -115,6 +115,10 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
mapper->setOrientation(Qt::Vertical);
+ GUIUtil::ItemDelegate* delegate = new GUIUtil::ItemDelegate(mapper);
+ connect(delegate, &GUIUtil::ItemDelegate::keyEscapePressed, this, &OptionsDialog::reject);
+ mapper->setItemDelegate(delegate);
+
/* setup/change UI elements when proxy IPs are invalid/valid */
ui->proxyIp->setCheckValidator(new ProxyAddressValidator(parent));
ui->proxyIpTor->setCheckValidator(new ProxyAddressValidator(parent));