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 = new QDataWidgetMapper(this);
|
||||||
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
|
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
|
||||||
|
|
||||||
|
GUIUtil::ItemDelegate* delegate = new GUIUtil::ItemDelegate(mapper);
|
||||||
|
connect(delegate, &GUIUtil::ItemDelegate::keyEscapePressed, this, &EditAddressDialog::reject);
|
||||||
|
mapper->setItemDelegate(delegate);
|
||||||
}
|
}
|
||||||
|
|
||||||
EditAddressDialog::~EditAddressDialog()
|
EditAddressDialog::~EditAddressDialog()
|
||||||
|
@ -1880,4 +1880,14 @@ void ClickableProgressBar::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
Q_EMIT clicked(event->pos());
|
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
|
} // namespace GUIUtil
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
|
#include <QItemDelegate>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QProgressBar>
|
#include <QProgressBar>
|
||||||
@ -424,6 +425,18 @@ namespace GUIUtil
|
|||||||
typedef ClickableProgressBar ProgressBar;
|
typedef ClickableProgressBar ProgressBar;
|
||||||
#endif
|
#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
|
} // namespace GUIUtil
|
||||||
|
|
||||||
#endif // BITCOIN_QT_GUIUTIL_H
|
#endif // BITCOIN_QT_GUIUTIL_H
|
||||||
|
@ -136,6 +136,10 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
|
|||||||
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
|
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
|
||||||
mapper->setOrientation(Qt::Vertical);
|
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 */
|
/* setup/change UI elements when proxy IPs are invalid/valid */
|
||||||
ui->proxyIp->setCheckValidator(new ProxyAddressValidator(parent));
|
ui->proxyIp->setCheckValidator(new ProxyAddressValidator(parent));
|
||||||
ui->proxyIpTor->setCheckValidator(new ProxyAddressValidator(parent));
|
ui->proxyIpTor->setCheckValidator(new ProxyAddressValidator(parent));
|
||||||
|
Loading…
Reference in New Issue
Block a user