0
0
mirror of https://github.com/keepassxreboot/keepassxc.git synced 2024-09-20 04:12:15 +02:00

Auto-Type: PageUp/PageDown scrolling for entries

Fixes #4530
This commit is contained in:
Toni Spets 2021-04-03 08:21:41 +03:00 committed by Jonathan White
parent 9b8feed3ed
commit 31aa5e12e5
4 changed files with 22 additions and 33 deletions

View File

@ -73,9 +73,13 @@ void AutoTypeMatchView::keyPressEvent(QKeyEvent* event)
{ {
if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) { if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) {
emit matchActivated(matchFromIndex(currentIndex())); emit matchActivated(matchFromIndex(currentIndex()));
} else if (event->key() == Qt::Key_PageUp) {
moveSelection(-5);
} else if (event->key() == Qt::Key_PageDown) {
moveSelection(5);
} else {
QTableView::keyPressEvent(event);
} }
QTableView::keyPressEvent(event);
} }
void AutoTypeMatchView::setMatchList(const QList<AutoTypeMatch>& matches, bool selectFirst) void AutoTypeMatchView::setMatchList(const QList<AutoTypeMatch>& matches, bool selectFirst)
@ -101,6 +105,13 @@ void AutoTypeMatchView::filterList(const QString& filter)
setCurrentIndex(m_sortModel->index(0, 0)); setCurrentIndex(m_sortModel->index(0, 0));
} }
void AutoTypeMatchView::moveSelection(int offset)
{
auto index = currentIndex();
auto row = index.isValid() ? index.row() : -1;
selectRow(qBound(0, row + offset, model()->rowCount() - 1));
}
AutoTypeMatch AutoTypeMatchView::currentMatch() AutoTypeMatch AutoTypeMatchView::currentMatch()
{ {
QModelIndexList list = selectionModel()->selectedRows(); QModelIndexList list = selectionModel()->selectedRows();

View File

@ -36,6 +36,7 @@ public:
AutoTypeMatch matchFromIndex(const QModelIndex& index); AutoTypeMatch matchFromIndex(const QModelIndex& index);
void setMatchList(const QList<AutoTypeMatch>& matches, bool selectFirst); void setMatchList(const QList<AutoTypeMatch>& matches, bool selectFirst);
void filterList(const QString& filter); void filterList(const QString& filter);
void moveSelection(int offset);
signals: signals:
void currentMatchChanged(AutoTypeMatch match); void currentMatchChanged(AutoTypeMatch match);

View File

@ -147,33 +147,6 @@ void AutoTypeSelectDialog::performSearch()
m_ui->view->setMatchList(matches, !m_ui->search->text().isEmpty()); m_ui->view->setMatchList(matches, !m_ui->search->text().isEmpty());
} }
void AutoTypeSelectDialog::moveSelectionUp()
{
auto current = m_ui->view->currentIndex();
auto previous = current.sibling(current.row() - 1, 0);
if (previous.isValid()) {
m_ui->view->setCurrentIndex(previous);
}
}
void AutoTypeSelectDialog::moveSelectionDown()
{
auto current = m_ui->view->currentIndex();
// special case where we have no default selection (empty search)
if (!current.isValid()) {
m_ui->view->setCurrentIndex(m_ui->view->indexAt({0, 0}));
return;
}
auto next = current.sibling(current.row() + 1, 0);
if (next.isValid()) {
m_ui->view->setCurrentIndex(next);
}
}
void AutoTypeSelectDialog::activateCurrentMatch() void AutoTypeSelectDialog::activateCurrentMatch()
{ {
submitAutoTypeMatch(m_ui->view->currentMatch()); submitAutoTypeMatch(m_ui->view->currentMatch());
@ -217,10 +190,16 @@ bool AutoTypeSelectDialog::eventFilter(QObject* obj, QEvent* event)
auto* keyEvent = static_cast<QKeyEvent*>(event); auto* keyEvent = static_cast<QKeyEvent*>(event);
switch (keyEvent->key()) { switch (keyEvent->key()) {
case Qt::Key_Up: case Qt::Key_Up:
moveSelectionUp(); m_ui->view->moveSelection(-1);
return true; return true;
case Qt::Key_Down: case Qt::Key_Down:
moveSelectionDown(); m_ui->view->moveSelection(1);
return true;
case Qt::Key_PageUp:
m_ui->view->moveSelection(-5);
return true;
case Qt::Key_PageDown:
m_ui->view->moveSelection(5);
return true; return true;
case Qt::Key_Escape: case Qt::Key_Escape:
if (m_ui->search->text().isEmpty()) { if (m_ui->search->text().isEmpty()) {

View File

@ -52,8 +52,6 @@ protected:
private slots: private slots:
void submitAutoTypeMatch(AutoTypeMatch match); void submitAutoTypeMatch(AutoTypeMatch match);
void performSearch(); void performSearch();
void moveSelectionUp();
void moveSelectionDown();
void activateCurrentMatch(); void activateCurrentMatch();
void updateActionMenu(const AutoTypeMatch& match); void updateActionMenu(const AutoTypeMatch& match);