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 committed Apr 4, 2021
1 parent 86ddd70 commit 1b446bc
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 26 deletions.
5 changes: 5 additions & 0 deletions src/autotype/AutoTypeMatchView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@ void AutoTypeMatchView::filterList(const QString& filter)
setCurrentIndex(m_sortModel->index(0, 0));
}

QModelIndex AutoTypeMatchView::indexAt(const QPoint& pos) const
{
return m_sortModel->index(pos.y(), pos.x());
}

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);
QModelIndex indexAt(const QPoint& pos) const override;

signals:
void currentMatchChanged(AutoTypeMatch match);
Expand Down
37 changes: 13 additions & 24 deletions src/autotype/AutoTypeSelectDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,31 +147,14 @@ void AutoTypeSelectDialog::performSearch()
m_ui->view->setMatchList(matches, !m_ui->search->text().isEmpty());
}

void AutoTypeSelectDialog::moveSelectionUp()
void AutoTypeSelectDialog::moveSelection(int offset)
{
auto current = m_ui->view->currentIndex();
auto previous = current.sibling(current.row() - 1, 0);
auto index = m_ui->view->currentIndex();
auto row = index.isValid() ? index.row() : -1;

if (previous.isValid()) {
m_ui->view->setCurrentIndex(previous);
}
}

void AutoTypeSelectDialog::moveSelectionDown()
{
auto current = m_ui->view->currentIndex();
index = m_ui->view->indexAt({0, qBound(0, row + offset, m_ui->view->model()->rowCount() - 1)});

// 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);
}
m_ui->view->setCurrentIndex(index);
}

void AutoTypeSelectDialog::activateCurrentMatch()
Expand Down Expand Up @@ -217,10 +200,16 @@ bool AutoTypeSelectDialog::eventFilter(QObject* obj, QEvent* event)
auto* keyEvent = static_cast<QKeyEvent*>(event);
switch (keyEvent->key()) {
case Qt::Key_Up:
moveSelectionUp();
moveSelection(-1);
return true;
case Qt::Key_Down:
moveSelectionDown();
moveSelection(1);
return true;
case Qt::Key_PageUp:
moveSelection(-5);
return true;
case Qt::Key_PageDown:
moveSelection(5);
return true;
case Qt::Key_Escape:
if (m_ui->search->text().isEmpty()) {
Expand Down
3 changes: 1 addition & 2 deletions src/autotype/AutoTypeSelectDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@ class AutoTypeSelectDialog : public QDialog
private slots:
void submitAutoTypeMatch(AutoTypeMatch match);
void performSearch();
void moveSelectionUp();
void moveSelectionDown();
void moveSelection(int offset);
void activateCurrentMatch();
void updateActionMenu(const AutoTypeMatch& match);

Expand Down

0 comments on commit 1b446bc

Please sign in to comment.