From 2cd7c21aa65f9d9b138f529c4f7da60740af50a3 Mon Sep 17 00:00:00 2001 From: jolavillette Date: Sat, 25 Jul 2026 13:31:47 +0200 Subject: [PATCH] gui(feedreader): add "Mark all as unread" alongside "Mark all as read" The FeedReader message widget already offered "Mark all as read" (toolbar button + context menu) but had no way to mark every visible message as unread again. Add the symmetric "Mark all as unread" entry to the message context menu. Factor the shared iterate-over-visible-items logic out of markAllAsReadMsg() into setAllMsgAsReadUnread(bool read); the read and unread slots now just call it. Like the existing "mark all as read", the action honours the current filter (acts on non-hidden rows only) and goes through the existing per-message setMessageRead() path, so no backend change is required. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../FeedReader/gui/FeedReaderMessageWidget.cpp | 15 ++++++++++++++- plugins/FeedReader/gui/FeedReaderMessageWidget.h | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/FeedReader/gui/FeedReaderMessageWidget.cpp b/plugins/FeedReader/gui/FeedReaderMessageWidget.cpp index b97aa4e8e..4a44b30ba 100644 --- a/plugins/FeedReader/gui/FeedReaderMessageWidget.cpp +++ b/plugins/FeedReader/gui/FeedReaderMessageWidget.cpp @@ -364,6 +364,9 @@ void FeedReaderMessageWidget::msgTreeCustomPopupMenu(QPoint /*point*/) action = contextMnu.addAction(QIcon(""), tr("Mark all as read"), this, SLOT(markAllAsReadMsg())); action->setEnabled(mFeedId); + action = contextMnu.addAction(QIcon(""), tr("Mark all as unread"), this, SLOT(markAllAsUnreadMsg())); + action->setEnabled(mFeedId); + contextMnu.addSeparator(); action = contextMnu.addAction(QIcon(""), tr("Copy link"), this, SLOT(copySelectedLinksMsg())); @@ -820,6 +823,16 @@ void FeedReaderMessageWidget::markAsUnreadMsg() } void FeedReaderMessageWidget::markAllAsReadMsg() +{ + setAllMsgAsReadUnread(true); +} + +void FeedReaderMessageWidget::markAllAsUnreadMsg() +{ + setAllMsgAsReadUnread(false); +} + +void FeedReaderMessageWidget::setAllMsgAsReadUnread(bool read) { QList items; @@ -831,7 +844,7 @@ void FeedReaderMessageWidget::markAllAsReadMsg() } ++it; } - setMsgAsReadUnread(items, true); + setMsgAsReadUnread(items, read); } void FeedReaderMessageWidget::copySelectedLinksMsg() diff --git a/plugins/FeedReader/gui/FeedReaderMessageWidget.h b/plugins/FeedReader/gui/FeedReaderMessageWidget.h index 40f16e29f..585763206 100644 --- a/plugins/FeedReader/gui/FeedReaderMessageWidget.h +++ b/plugins/FeedReader/gui/FeedReaderMessageWidget.h @@ -68,6 +68,7 @@ private slots: void markAsReadMsg(); void markAsUnreadMsg(); void markAllAsReadMsg(); + void markAllAsUnreadMsg(); void copySelectedLinksMsg(); void removeMsg(); void processFeed(); @@ -91,6 +92,7 @@ private: void calculateMsgIconsAndFonts(QTreeWidgetItem *item); void updateMsgItem(QTreeWidgetItem *item, FeedMsgInfo &info); void setMsgAsReadUnread(QList &rows, bool read); + void setAllMsgAsReadUnread(bool read); void filterItem(QTreeWidgetItem *item, const QString &text, int filterColumn); void filterItem(QTreeWidgetItem *item); void toggleMsgText_internal();