diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index 4cc0a8272..f978777d0 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -26,7 +26,7 @@
https://github.com/sponsors/martinrotter
-
+
none
diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp
index c10690970..748c26a59 100644
--- a/src/librssguard/gui/messagesview.cpp
+++ b/src/librssguard/gui/messagesview.cpp
@@ -27,11 +27,10 @@
#include
#include
#include
-#include
MessagesView::MessagesView(QWidget* parent)
: BaseTreeView(parent), m_contextMenu(nullptr), m_columnsAdjusted(false), m_processingAnyMouseButton(false),
- m_processingRightMouseButton(false) {
+ m_processingRightMouseButton(false) {
m_sourceModel = qApp->feedReader()->messagesModel();
m_proxyModel = qApp->feedReader()->messagesProxyModel();
m_sourceModel->setView(this);
@@ -82,15 +81,18 @@ void MessagesView::restoreHeaderState(const QByteArray& dta) {
inn.setVersion(QDataStream::Version::Qt_4_7);
- int saved_header_count; inn >> saved_header_count;
+ int saved_header_count;
+ inn >> saved_header_count;
if (std::abs(saved_header_count - header()->count()) > 10) {
qWarningNN << LOGSEC_GUI << "Detected invalid state for list view.";
return;
}
- int saved_sort_order; inn >> saved_sort_order;
- int saved_sort_column; inn >> saved_sort_column;
+ int saved_sort_order;
+ inn >> saved_sort_order;
+ int saved_sort_column;
+ inn >> saved_sort_column;
for (int i = 0; i < saved_header_count && i < header()->count(); i++) {
int vi, ss;
@@ -124,8 +126,8 @@ void MessagesView::copyUrlOfSelectedArticles() const {
QStringList urls;
for (const auto article_idx : mapped_indexes) {
- urls << m_sourceModel->data(m_sourceModel->index(article_idx.row(), MSG_DB_URL_INDEX),
- Qt::ItemDataRole::EditRole).toString();
+ urls << m_sourceModel->data(m_sourceModel->index(article_idx.row(), MSG_DB_URL_INDEX), Qt::ItemDataRole::EditRole)
+ .toString();
}
if (qApp->clipboard() != nullptr && !urls.isEmpty()) {
@@ -133,8 +135,10 @@ void MessagesView::copyUrlOfSelectedArticles() const {
}
}
-void MessagesView::sort(int column, Qt::SortOrder order,
- bool repopulate_data, bool change_header,
+void MessagesView::sort(int column,
+ Qt::SortOrder order,
+ bool repopulate_data,
+ bool change_header,
bool emit_changed_from_header,
bool ignore_multicolumn_sorting) {
if (change_header && !emit_changed_from_header) {
@@ -172,21 +176,20 @@ void MessagesView::keyboardSearch(const QString& search) {
void MessagesView::reloadSelections() {
const QDateTime dt1 = QDateTime::currentDateTime();
QModelIndex current_index = selectionModel()->currentIndex();
- const bool is_current_selected = selectionModel()->selectedRows().contains(m_proxyModel->index(current_index.row(),
- 0,
- current_index.parent()));
+ const bool is_current_selected =
+ selectionModel()->selectedRows().contains(m_proxyModel->index(current_index.row(), 0, current_index.parent()));
const QModelIndex mapped_current_index = m_proxyModel->mapToSource(current_index);
const Message selected_message = m_sourceModel->messageAt(mapped_current_index.row());
const int col = header()->sortIndicatorSection();
const Qt::SortOrder ord = header()->sortIndicatorOrder();
+ bool do_not_mark_read_on_select = false;
// Reload the model now.
sort(col, ord, true, false, false, true);
// Now, we must find the same previously focused message.
if (selected_message.m_id > 0) {
- if (m_proxyModel->rowCount() == 0 ||
- !is_current_selected) {
+ if (m_proxyModel->rowCount() == 0 || !is_current_selected) {
current_index = QModelIndex();
}
else {
@@ -196,6 +199,11 @@ void MessagesView::reloadSelections() {
if (msg.m_id == selected_message.m_id) {
current_index = msg_idx;
+
+ if (!msg.m_isRead /* && selected_message.m_isRead */) {
+ do_not_mark_read_on_select = true;
+ }
+
break;
}
@@ -208,8 +216,13 @@ void MessagesView::reloadSelections() {
if (current_index.isValid()) {
scrollTo(current_index);
+
+ m_processingRightMouseButton = do_not_mark_read_on_select;
+
setCurrentIndex(current_index);
reselectIndexes(QModelIndexList() << current_index);
+
+ m_processingRightMouseButton = false;
}
else {
// Messages were probably removed from the model, nothing can
@@ -219,10 +232,7 @@ void MessagesView::reloadSelections() {
const QDateTime dt2 = QDateTime::currentDateTime();
- qDebugNN << LOGSEC_GUI
- << "Reloading of msg selections took "
- << dt1.msecsTo(dt2)
- << " miliseconds.";
+ qDebugNN << LOGSEC_GUI << "Reloading of msg selections took " << dt1.msecsTo(dt2) << " miliseconds.";
}
void MessagesView::setupAppearance() {
@@ -251,10 +261,12 @@ void MessagesView::setupAppearance() {
setSortingEnabled(true);
setAllColumnsShowFocus(false);
setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection);
- setItemDelegate(new StyledItemDelegateWithoutFocus(qApp->settings()->value(GROUP(GUI),
- SETTING(GUI::HeightRowMessages)).toInt(),
- qApp->settings()->value(GROUP(Messages),
- SETTING(Messages::ArticleListPadding)).toInt(),
+ setItemDelegate(new StyledItemDelegateWithoutFocus(qApp->settings()
+ ->value(GROUP(GUI), SETTING(GUI::HeightRowMessages))
+ .toInt(),
+ qApp->settings()
+ ->value(GROUP(Messages), SETTING(Messages::ArticleListPadding))
+ .toInt(),
this));
header()->setDefaultSectionSize(MESSAGES_VIEW_DEFAULT_COL);
@@ -267,15 +279,13 @@ void MessagesView::setupAppearance() {
void MessagesView::focusInEvent(QFocusEvent* event) {
QTreeView::focusInEvent(event);
- qDebugNN << LOGSEC_GUI
- << "Message list got focus with reason"
- << QUOTE_W_SPACE_DOT(event->reason());
+ qDebugNN << LOGSEC_GUI << "Message list got focus with reason" << QUOTE_W_SPACE_DOT(event->reason());
- if ((event->reason()== Qt::FocusReason::TabFocusReason ||
- event->reason()== Qt::FocusReason::BacktabFocusReason ||
- event->reason()== Qt::FocusReason::ShortcutFocusReason) &&
+ if ((event->reason() == Qt::FocusReason::TabFocusReason || event->reason() == Qt::FocusReason::BacktabFocusReason ||
+ event->reason() == Qt::FocusReason::ShortcutFocusReason) &&
currentIndex().isValid()) {
- selectionModel()->select(currentIndex(), QItemSelectionModel::SelectionFlag::Select | QItemSelectionModel::SelectionFlag::Rows);
+ selectionModel()->select(currentIndex(),
+ QItemSelectionModel::SelectionFlag::Select | QItemSelectionModel::SelectionFlag::Rows);
}
}
@@ -316,9 +326,11 @@ void MessagesView::initializeContextMenu() {
if (m_sourceModel->loadedItem() != nullptr) {
QModelIndexList selected_indexes = selectionModel()->selectedRows();
const QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes);
- auto rows = boolinq::from(mapped_indexes).select([](const QModelIndex& idx) {
- return idx.row();
- }).toStdList();
+ auto rows = boolinq::from(mapped_indexes)
+ .select([](const QModelIndex& idx) {
+ return idx.row();
+ })
+ .toStdList();
selected_messages = m_sourceModel->messagesAt(FROM_STD_LIST(QList, rows));
}
@@ -350,15 +362,16 @@ void MessagesView::initializeContextMenu() {
// Labels.
auto labels = m_sourceModel->loadedItem() != nullptr
- ? m_sourceModel->loadedItem()->getParentServiceRoot()->labelsNode()->labels()
- : QList