mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge #13791: gui: Reject dialogs if key escape is pressed
7bf22bf0c21d13557ec46a67413819ebcabc3df0 gui: Reject options dialog when key escape is pressed (João Barbosa) 4a43306a4f643cf0d356d5d5e16913541f1bc893 gui: Reject edit address dialog when key escape is pressed (João Barbosa) f7a553177d4b969956bc04a0140fce34958971f5 gui: Add GUIUtil::ItemDelegate with keyEscapePressed signal (João Barbosa) Pull request description: Currently `EditAddressDialog` and `OptionsDialog` don't close when the escape key is pressed. The `QDataWidgetMapper` instances prevents closing the dialogs because the escape key is used to reset the widgets values. More details and workarounds in https://stackoverflow.com/a/51487847 and http://qtramblings.blogspot.com/2010/10/qdatawidgetmapper-annoyances.html. The adopted solution is different from the above references. It turns out that `QDataWidgetMapper::setItemDelegate` sets the event filter for all mapped widgets. So in this PR the mapper's delegate are changed to a custom `GUIUtil::ItemDelegate` that offers the signal `keyEscapePressed`, which is connected to the `QDialog::reject` slot. Note that the installed event filter lets all events pass, so the current behaviour isn't changed, meaning that widgets values are reset in addition to closing the dialog. Tree-SHA512: 9c961d488480b4ccc3880a11a8f1824b65f77570ee8918c7302c62775a1a73e52ae988a31a55ffff87b4170ddbecf833c2f09b66095c00eb6854a4d43f030f1f
This commit is contained in:
parent
619f7fb862
commit
dc914a32bc
@ -41,6 +41,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()
|
||||
|
@ -1880,4 +1880,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
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include <QEvent>
|
||||
#include <QHeaderView>
|
||||
#include <QItemDelegate>
|
||||
#include <QMessageBox>
|
||||
#include <QObject>
|
||||
#include <QProgressBar>
|
||||
@ -424,6 +425,18 @@ namespace GUIUtil
|
||||
typedef ClickableProgressBar ProgressBar;
|
||||
#endif
|
||||
|
||||
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
|
||||
|
@ -136,6 +136,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));
|
||||
|
Loading…
Reference in New Issue
Block a user