diff --git a/src/article.cpp b/src/article.cpp --- a/src/article.cpp +++ b/src/article.cpp @@ -386,7 +386,7 @@ d->archive->setStatus(d->guid, d->status); } if (d->feed) { - d->feed->setArticleChanged(*this, oldStatus); + d->feed->setArticleChanged(*this, oldStatus, stat != Read); } } } diff --git a/src/feed/feed.h b/src/feed/feed.h --- a/src/feed/feed.h +++ b/src/feed/feed.h @@ -264,11 +264,14 @@ */ void setArticleDeleted(Article &a); - /** notifies that article @c mya was changed - @param oldStatus if the status was changed, it contains the old status, -1 otherwise + /** Notifies that article @p a was changed. + @param oldStatus The old status if the status was changed, + or -1 if the status was not changed + @param process Set to @c false to disable processing the change + (updating article list and updating on-screen unread count) To be called by @ref Article */ - void setArticleChanged(Article &a, int oldStatus = -1); + void setArticleChanged(Article &a, int oldStatus = -1, bool process = true); void appendArticles(const Syndication::FeedPtr &feed); diff --git a/src/feed/feed.cpp b/src/feed/feed.cpp --- a/src/feed/feed.cpp +++ b/src/feed/feed.cpp @@ -828,18 +828,20 @@ articlesModified(); } -void Akregator::Feed::setArticleChanged(Article &a, int oldStatus) +void Akregator::Feed::setArticleChanged(Article &a, int oldStatus, bool process) { + int newStatus = a.status(); if (oldStatus != -1) { - int newStatus = a.status(); if (oldStatus == Read && newStatus != Read) { setUnread(unread() + 1); } else if (oldStatus != Read && newStatus == Read) { setUnread(unread() - 1); } } d->updatedArticlesNotify.append(a); - articlesModified(); + if (process) { + articlesModified(); + } } int Akregator::Feed::totalCount() const