From b1ff346f6311936a342397eaaca262a6f08e19c7 Mon Sep 17 00:00:00 2001 From: George Shakhnazaryan Date: Wed, 26 Sep 2018 18:07:21 -0500 Subject: [PATCH] Allow Enter key to select recent DB on OS X * Override `keyPressEvent`on WelcomeWidget on OS X to `openDatabaseFromFile`. openDatabaseFromFile is already invoked via the QListWidget::itemActivated signal, but this signal doesn't fire on OS X for Enter. QListWidget::itemActivated activates on an OS specific activation key. [1] On Windows/X11, this is Enter, which lets the user easily navigate with just the keyboard. On OS X, this is Ctrl+O, which is already bound to Open Database. This means that itemActivated cannot fire via the keyboard. Per StackOverflow [2], the recommended solution is to catch the enter/return key press manually. This seems like a common problem with Qt. [3] [4] [1] https://doc.qt.io/archives/qt-4.8/qlistwidget.html#itemActivated [2] https://stackoverflow.com/questions/31650780/when-does-a-qtreeview-emit-the-activated-signal-on-mac [3] https://forum.qt.io/topic/36147/pyside-itemactivated-not-triggered-on-mac-os-x-with-return-key [4] https://github.com/dolphin-emu/dolphin/pull/6099 --- src/gui/WelcomeWidget.cpp | 9 +++++++++ src/gui/WelcomeWidget.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/gui/WelcomeWidget.cpp b/src/gui/WelcomeWidget.cpp index ed0ca2936..9acb0a575 100644 --- a/src/gui/WelcomeWidget.cpp +++ b/src/gui/WelcomeWidget.cpp @@ -16,6 +16,7 @@ * along with this program. If not, see . */ +#include #include "WelcomeWidget.h" #include "ui_WelcomeWidget.h" @@ -76,3 +77,11 @@ void WelcomeWidget::refreshLastDatabases() m_ui->recentListWidget->addItem(itm); } } + +void WelcomeWidget::keyPressEvent(QKeyEvent *event) { + if (m_ui->recentListWidget->hasFocus() && (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)) { + openDatabaseFromFile(m_ui->recentListWidget->currentItem()); + } + + QWidget::keyPressEvent(event); +} diff --git a/src/gui/WelcomeWidget.h b/src/gui/WelcomeWidget.h index 1b2483437..53565902f 100644 --- a/src/gui/WelcomeWidget.h +++ b/src/gui/WelcomeWidget.h @@ -43,6 +43,9 @@ signals: void importKeePass1Database(); void importCsv(); +protected: + void keyPressEvent(QKeyEvent *event) override; + private slots: void openDatabaseFromFile(QListWidgetItem* item);