desktop: fix paging through dive list with page-up key, etc

In the dive list we have horrible code, which intercepts all events
to save the selection before/after the event. This was necessary
because we couldn't get Qt's selection data flow under control.

This means intercepting all events that can change the selection.
The page-up, page-down, home and end keys were forgotten. Add these
cases.

Fixes #2957.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2020-10-02 18:47:05 +02:00 committed by Dirk Hohndel
parent d8f35711ff
commit 06c35026d6
2 changed files with 16 additions and 4 deletions

View file

@ -1,3 +1,4 @@
- desktop: respect page-up, page-down, home and end keys for selection change [#2957]
- Use pO2 from prefernces for MOD display in equipment tab
- filter: more flexible filtering system based on individual constraints
- mobile: fix manually adding dives in the past [#2971]

View file

@ -448,10 +448,21 @@ void DiveListView::mouseReleaseEvent(QMouseEvent *event)
void DiveListView::keyPressEvent(QKeyEvent *event)
{
// Hook into cursor-up and cursor-down events and update selection if necessary.
// See comment in mouseReleaseEvent()
if (event->key() != Qt::Key_Down && event->key() != Qt::Key_Up)
return QTreeView::keyPressEvent(event);
// Hook into key events that change the selection (i.e. cursor-up, cursor-down,
// page-up, page-down, home and end) and update selection if necessary.
// See comment in mouseReleaseEvent().
switch (event->key()) {
case Qt::Key_Up:
case Qt::Key_Down:
case Qt::Key_PageUp:
case Qt::Key_PageDown:
case Qt::Key_Home:
case Qt::Key_End:
break;
default:
return QTreeView::keyPressEvent(event);
}
QModelIndexList selectionBefore = selectionModel()->selectedRows();
QTreeView::keyPressEvent(event);
QModelIndexList selectionAfter = selectionModel()->selectedRows();