diff --git a/Telegram/SourceFiles/data/data_forum_topic.cpp b/Telegram/SourceFiles/data/data_forum_topic.cpp index 4e076bb7a..5c87c3656 100644 --- a/Telegram/SourceFiles/data/data_forum_topic.cpp +++ b/Telegram/SourceFiles/data/data_forum_topic.cpp @@ -707,8 +707,7 @@ void ForumTopic::applyTitle(const QString &title) { return; } _title = title; - ++_titleVersion; - _forum->recentTopicsInvalidate(this); + invalidateTitleWithIcon(); _defaultIcon = QImage(); indexTitleParts(); updateChatListEntry(); @@ -724,7 +723,7 @@ void ForumTopic::applyIconId(DocumentId iconId) { return; } _iconId = iconId; - ++_titleVersion; + invalidateTitleWithIcon(); _icon = iconId ? std::make_unique( owner().customEmojiManager().create( @@ -740,6 +739,11 @@ void ForumTopic::applyIconId(DocumentId iconId) { session().changes().topicUpdated(this, UpdateFlag::IconId); } +void ForumTopic::invalidateTitleWithIcon() { + ++_titleVersion; + _forum->recentTopicsInvalidate(this); +} + int32 ForumTopic::colorId() const { return _colorId; } diff --git a/Telegram/SourceFiles/data/data_forum_topic.h b/Telegram/SourceFiles/data/data_forum_topic.h index f01700ada..12a4eb26e 100644 --- a/Telegram/SourceFiles/data/data_forum_topic.h +++ b/Telegram/SourceFiles/data/data_forum_topic.h @@ -179,6 +179,7 @@ private: void validateGeneralIcon(const Dialogs::Ui::PaintContext &context) const; void applyTopicTopMessage(MsgId topMessageId); void growLastKnownServerMessageId(MsgId id); + void invalidateTitleWithIcon(); void setLastMessage(HistoryItem *item); void setLastServerMessage(HistoryItem *item); diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_topics_view.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_topics_view.cpp index b82b153a1..564d7f88d 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_topics_view.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_topics_view.cpp @@ -56,10 +56,9 @@ void TopicsView::prepare(MsgId frontRootId, Fn customEmojiRepaint) { _titles.emplace_back(); } auto &title = _titles[index++]; - title.topicRootId = rootId; - const auto unread = topic->chatListBadgesState().unread; - if (title.unread == unread + if (title.topicRootId == rootId + && title.unread == unread && title.version == topic->titleVersion()) { continue; } @@ -69,6 +68,7 @@ void TopicsView::prepare(MsgId frontRootId, Fn customEmojiRepaint) { .customEmojiLoopLimit = kIconLoopCount, }; auto topicTitle = topic->titleWithIcon(); + title.topicRootId = rootId; title.version = topic->titleVersion(); title.unread = unread; title.title.setMarkedText(