From 6acbac4421a7568a2c64a68f09546dded7637aaa Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 22 Mar 2021 14:08:03 +0100 Subject: [PATCH] Fix #389. --- src/librssguard/gui/feedmessageviewer.cpp | 4 ++-- src/librssguard/gui/feedsview.cpp | 15 +++++++++------ src/librssguard/gui/messagesview.cpp | 13 +++++++++++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/librssguard/gui/feedmessageviewer.cpp b/src/librssguard/gui/feedmessageviewer.cpp index 9361caa8f..facad6aba 100644 --- a/src/librssguard/gui/feedmessageviewer.cpp +++ b/src/librssguard/gui/feedmessageviewer.cpp @@ -5,6 +5,8 @@ #include "core/feeddownloader.h" #include "core/feedsproxymodel.h" #include "core/messagesproxymodel.h" +#include "database/databasecleaner.h" +#include "database/databasefactory.h" #include "exceptions/applicationexception.h" #include "gui/dialogs/formdatabasecleanup.h" #include "gui/dialogs/formmain.h" @@ -16,8 +18,6 @@ #include "gui/messagesview.h" #include "gui/statusbar.h" #include "gui/systemtrayicon.h" -#include "database/databasecleaner.h" -#include "database/databasefactory.h" #include "miscellaneous/feedreader.h" #include "miscellaneous/iconfactory.h" #include "miscellaneous/mutex.h" diff --git a/src/librssguard/gui/feedsview.cpp b/src/librssguard/gui/feedsview.cpp index 3af9fd0ec..b940e49b8 100755 --- a/src/librssguard/gui/feedsview.cpp +++ b/src/librssguard/gui/feedsview.cpp @@ -332,15 +332,16 @@ void FeedsView::openSelectedItemsInNewspaperMode() { } void FeedsView::selectNextItem() { - QModelIndex index_previous = moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier); + QModelIndex index_next = moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier); - while (m_proxyModel->hasChildren(index_previous) && !isExpanded(index_previous)) { - expand(index_previous); - index_previous = moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier); + while (m_proxyModel->hasChildren(index_next) && !isExpanded(index_next)) { + expand(index_next); + index_next = moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier); } - if (index_previous.isValid()) { - setCurrentIndex(index_previous); + if (index_next.isValid()) { + setCurrentIndex(index_next); + scrollTo(index_next, QAbstractItemView::ScrollHint::PositionAtTop); } setFocus(); @@ -356,6 +357,7 @@ void FeedsView::selectPreviousItem() { if (index_previous.isValid()) { setCurrentIndex(index_previous); + scrollTo(index_previous, QAbstractItemView::ScrollHint::PositionAtTop); } setFocus(); @@ -373,6 +375,7 @@ void FeedsView::selectNextUnreadItem() { if (next_unread_row.isValid()) { setCurrentIndex(next_unread_row); + scrollTo(next_unread_row, QAbstractItemView::ScrollHint::PositionAtTop); emit requestViewNextUnreadMessage(); } } diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index 6a14f71c0..956e5cbc6 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -348,7 +348,7 @@ void MessagesView::selectionChanged(const QItemSelection& selected, const QItemS } if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::KeepCursorInCenter)).toBool()) { - scrollTo(currentIndex(), QAbstractItemView::PositionAtCenter); + scrollTo(currentIndex(), QAbstractItemView::ScrollHint::PositionAtCenter); } QTreeView::selectionChanged(selected, deselected); @@ -533,6 +533,7 @@ void MessagesView::selectNextItem() { if (index_next.isValid()) { setCurrentIndex(index_next); + scrollTo(index_next, QAbstractItemView::ScrollHint::PositionAtTop); selectionModel()->select(index_next, QItemSelectionModel::Select | QItemSelectionModel::Rows); setFocus(); } @@ -543,6 +544,7 @@ void MessagesView::selectPreviousItem() { if (index_previous.isValid()) { setCurrentIndex(index_previous); + scrollTo(index_previous, QAbstractItemView::ScrollHint::PositionAtTop); selectionModel()->select(index_previous, QItemSelectionModel::Select | QItemSelectionModel::Rows); setFocus(); } @@ -565,8 +567,15 @@ void MessagesView::selectNextUnreadItem() { if (next_unread.isValid()) { // We found unread message, mark it. setCurrentIndex(next_unread); - selectionModel()->select(next_unread, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + selectionModel()->select(next_unread, + QItemSelectionModel::SelectionFlag::ClearAndSelect | + QItemSelectionModel::SelectionFlag::Rows); setFocus(); + + // Make sure that item is properly visible even if + // message previewer was hidden and shows up. + qApp->processEvents(); + scrollTo(next_unread, QAbstractItemView::ScrollHint::PositionAtTop); } }