diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts
index 511290fb3..94a0c7c1c 100644
--- a/share/translations/keepassxc_en.ts
+++ b/share/translations/keepassxc_en.ts
@@ -1746,6 +1746,10 @@ Are you sure you want to continue with this file?.
Hardware keys found, but no slots are configured.
+
+ Press ESC again to close this database
+
+
Windows Hello setup was canceled or failed. Quick unlock has not been enabled.
diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp
index 29c178db9..949fee143 100644
--- a/src/gui/DatabaseOpenWidget.cpp
+++ b/src/gui/DatabaseOpenWidget.cpp
@@ -171,6 +171,29 @@ void DatabaseOpenWidget::toggleHardwareKeyComponent(bool state)
m_ui->useHardwareKeyCheckBox->setText(tr("Use hardware key"));
}
}
+void DatabaseOpenWidget::closeDatabase()
+{
+ int closeWarningInterval = 3000;
+
+ if (!m_triedToQuit && window() == getMainWindow()) {
+ m_triedToQuit = true;
+ m_ui->messageWidget->showMessage(
+ tr("Press ESC again to close this database"), MessageWidget::Warning, closeWarningInterval);
+
+ QTimer::singleShot(closeWarningInterval, this, [this]() { m_triedToQuit = false; });
+ return;
+ }
+ reject();
+}
+
+void DatabaseOpenWidget::keyPressEvent(QKeyEvent* event)
+{
+ if (event->key() == Qt::Key_Escape) {
+ closeDatabase();
+ } else {
+ DialogyWidget::keyPressEvent(event);
+ }
+}
bool DatabaseOpenWidget::event(QEvent* event)
{
diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h
index 8b02d8c90..6050e7094 100644
--- a/src/gui/DatabaseOpenWidget.h
+++ b/src/gui/DatabaseOpenWidget.h
@@ -66,6 +66,7 @@ signals:
protected:
bool event(QEvent* event) override;
+ void keyPressEvent(QKeyEvent* event) override;
QSharedPointer buildDatabaseKey();
void setUserInteractionLock(bool state);
@@ -81,6 +82,7 @@ protected slots:
private slots:
bool browseKeyFile();
void toggleHardwareKeyComponent(bool state);
+ void closeDatabase();
void pollHardwareKey(bool manualTrigger = false, int delay = 0);
void hardwareKeyResponse(bool found);
@@ -92,6 +94,7 @@ private:
bool m_manualHardwareKeyRefresh = false;
bool m_blockQuickUnlock = false;
bool m_unlockingDatabase = false;
+ bool m_triedToQuit = false;
QTimer m_hideTimer;
QTimer m_hideNoHardwareKeysFoundTimer;