diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp index 240dd723b..b39c78e1d 100644 --- a/src/autotype/AutoTypeSelectDialog.cpp +++ b/src/autotype/AutoTypeSelectDialog.cpp @@ -58,6 +58,7 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); connect(m_view, SIGNAL(clicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); + connect(m_view, SIGNAL(rejected()), SLOT(reject())); connect(m_view->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(entryRemoved())); layout->addWidget(m_view); diff --git a/src/autotype/AutoTypeSelectView.cpp b/src/autotype/AutoTypeSelectView.cpp index 717e20a31..7d9db4130 100644 --- a/src/autotype/AutoTypeSelectView.cpp +++ b/src/autotype/AutoTypeSelectView.cpp @@ -17,6 +17,7 @@ #include "AutoTypeSelectView.h" +#include #include AutoTypeSelectView::AutoTypeSelectView(QWidget* parent) @@ -54,3 +55,12 @@ void AutoTypeSelectView::selectFirstEntry() setCurrentIndex(index); } } + +void AutoTypeSelectView::keyReleaseEvent(QKeyEvent* e) +{ + if (e->key() == Qt::Key_Escape) { + emit rejected(); + } else { + e->ignore(); + } +} \ No newline at end of file diff --git a/src/autotype/AutoTypeSelectView.h b/src/autotype/AutoTypeSelectView.h index a781757b8..aadf99fa6 100644 --- a/src/autotype/AutoTypeSelectView.h +++ b/src/autotype/AutoTypeSelectView.h @@ -31,9 +31,13 @@ public: protected: void mouseMoveEvent(QMouseEvent* event) override; + void keyReleaseEvent(QKeyEvent* e) override; private slots: void selectFirstEntry(); + +signals: + void rejected(); }; #endif // KEEPASSX_AUTOTYPESELECTVIEW_H diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index 08228ea1f..c9c10aa56 100644 --- a/src/gui/PasswordGeneratorWidget.cpp +++ b/src/gui/PasswordGeneratorWidget.cpp @@ -153,12 +153,8 @@ void PasswordGeneratorWidget::setStandaloneMode(bool standalone) void PasswordGeneratorWidget::keyPressEvent(QKeyEvent* e) { - if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) { - if (e->key() == Qt::Key_Escape && m_standalone == true) { - emit dialogTerminated(); - } else { - e->ignore(); - } + if (e->key() == Qt::Key_Escape && m_standalone == true) { + emit dialogTerminated(); } else { e->ignore(); } diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp index ceb3c64a0..36d60ced5 100644 --- a/src/gui/entry/EntryView.cpp +++ b/src/gui/entry/EntryView.cpp @@ -121,6 +121,20 @@ void EntryView::keyPressEvent(QKeyEvent* event) #endif } + int last = m_model->rowCount() - 1; + + if (event->key() == Qt::Key_Up && currentIndex().row() == 0) { + QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(last, 0)); + setCurrentEntry(m_model->entryFromIndex(index)); + return; + } + + if (event->key() == Qt::Key_Down && currentIndex().row() == last) { + QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); + setCurrentEntry(m_model->entryFromIndex(index)); + return; + } + QTreeView::keyPressEvent(event); }