Skip to content

Commit

Permalink
Auto-Type: PageUp/PageDown scrolling for entries
Browse files Browse the repository at this point in the history
Fixes #4530
  • Loading branch information
hifi authored and droidmonkey committed Apr 6, 2021
1 parent ed0ece3 commit 3f00d15
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 33 deletions.
15 changes: 13 additions & 2 deletions src/autotype/AutoTypeMatchView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,13 @@ void AutoTypeMatchView::keyPressEvent(QKeyEvent* event)
{
if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) {
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)
Expand All @@ -101,6 +105,13 @@ void AutoTypeMatchView::filterList(const QString& filter)
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()
{
QModelIndexList list = selectionModel()->selectedRows();
Expand Down
1 change: 1 addition & 0 deletions src/autotype/AutoTypeMatchView.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class AutoTypeMatchView : public QTableView
AutoTypeMatch matchFromIndex(const QModelIndex& index);
void setMatchList(const QList<AutoTypeMatch>& matches, bool selectFirst);
void filterList(const QString& filter);
void moveSelection(int offset);

signals:
void currentMatchChanged(AutoTypeMatch match);
Expand Down
37 changes: 8 additions & 29 deletions src/autotype/AutoTypeSelectDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,33 +147,6 @@ void AutoTypeSelectDialog::performSearch()
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()
{
submitAutoTypeMatch(m_ui->view->currentMatch());
Expand Down Expand Up @@ -217,10 +190,16 @@ bool AutoTypeSelectDialog::eventFilter(QObject* obj, QEvent* event)
auto* keyEvent = static_cast<QKeyEvent*>(event);
switch (keyEvent->key()) {
case Qt::Key_Up:
moveSelectionUp();
m_ui->view->moveSelection(-1);
return true;
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;
case Qt::Key_Escape:
if (m_ui->search->text().isEmpty()) {
Expand Down
2 changes: 0 additions & 2 deletions src/autotype/AutoTypeSelectDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ class AutoTypeSelectDialog : public QDialog
private slots:
void submitAutoTypeMatch(AutoTypeMatch match);
void performSearch();
void moveSelectionUp();
void moveSelectionDown();
void activateCurrentMatch();
void updateActionMenu(const AutoTypeMatch& match);

Expand Down

0 comments on commit 3f00d15

Please sign in to comment.