diff --git a/src/librssguard/core/messagesmodel.cpp b/src/librssguard/core/messagesmodel.cpp index 03e6ef86b..58bb35f50 100644 --- a/src/librssguard/core/messagesmodel.cpp +++ b/src/librssguard/core/messagesmodel.cpp @@ -619,6 +619,15 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const { } } +bool MessagesModel::switchMessageReadUnread(int row_index) { + RootItem::ReadStatus current_read = + RootItem::ReadStatus(data(row_index, MSG_DB_READ_INDEX, Qt::ItemDataRole::EditRole).toInt()); + + return setMessageRead(row_index, + current_read == RootItem::ReadStatus::Read ? RootItem::ReadStatus::Unread + : RootItem::ReadStatus::Read); +} + bool MessagesModel::setMessageRead(int row_index, RootItem::ReadStatus read) { if (data(row_index, MSG_DB_READ_INDEX, Qt::ItemDataRole::EditRole).toInt() == int(read)) { // Read status is the same is the one currently set. diff --git a/src/librssguard/core/messagesmodel.h b/src/librssguard/core/messagesmodel.h index c5a79067e..07df1117d 100644 --- a/src/librssguard/core/messagesmodel.h +++ b/src/librssguard/core/messagesmodel.h @@ -65,6 +65,7 @@ class MessagesModel : public QSqlQueryModel, public MessagesModelSqlLayer { // SINGLE message manipulators. bool switchMessageImportance(int row_index); + bool switchMessageReadUnread(int row_index); bool setMessageRead(int row_index, RootItem::ReadStatus read); // BATCH messages manipulators. diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index d85a2e23f..a4c7942ed 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -474,6 +474,11 @@ void MessagesView::mousePressEvent(QMouseEvent* event) { emit currentMessageChanged(m_sourceModel->messageAt(mapped_index.row()), m_sourceModel->loadedItem()); } } + else if (mapped_index.column() == MSG_DB_READ_INDEX) { + if (m_sourceModel->switchMessageReadUnread(mapped_index.row())) { + emit currentMessageChanged(m_sourceModel->messageAt(mapped_index.row()), m_sourceModel->loadedItem()); + } + } } break;