From f8b7dc88a9802bf7cc63877695b5300e62e6a45b Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Thu, 19 Jun 2025 17:40:51 -0400 Subject: [PATCH] Implement database closing question on escape --- share/translations/keepassxc_en.ts | 4 ++++ src/gui/DatabaseOpenWidget.cpp | 23 +++++++++++++++++++++++ src/gui/DatabaseOpenWidget.h | 3 +++ 3 files changed, 30 insertions(+) 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;