diff --git a/Telegram/SourceFiles/data/data_groups.cpp b/Telegram/SourceFiles/data/data_groups.cpp index 6e0998d4d..965566994 100644 --- a/Telegram/SourceFiles/data/data_groups.cpp +++ b/Telegram/SourceFiles/data/data_groups.cpp @@ -21,7 +21,7 @@ constexpr auto kMaxItemsInGroup = 10; Groups::Groups(not_null data) : _data(data) { } -bool Groups::isGrouped(not_null item) const { +bool Groups::isGrouped(not_null item) const { if (!item->groupId()) { return false; } @@ -124,7 +124,7 @@ HistoryItemsList::const_iterator Groups::findPositionForItem( return last; } -const Group *Groups::find(not_null item) const { +const Group *Groups::find(not_null item) const { const auto groupId = item->groupId(); if (!groupId) { return nullptr; diff --git a/Telegram/SourceFiles/data/data_groups.h b/Telegram/SourceFiles/data/data_groups.h index be628cbaf..6364251ba 100644 --- a/Telegram/SourceFiles/data/data_groups.h +++ b/Telegram/SourceFiles/data/data_groups.h @@ -22,14 +22,14 @@ class Groups { public: Groups(not_null data); - bool isGrouped(not_null item) const; + [[nodiscard]] bool isGrouped(not_null item) const; void registerMessage(not_null item); void unregisterMessage(not_null item); void refreshMessage( not_null item, bool justRefreshViews = false); - const Group *find(not_null item) const; + [[nodiscard]] const Group *find(not_null item) const; not_null findItemToEdit(not_null item) const; diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 3c3be4212..bcc4392b1 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -1417,9 +1417,23 @@ rpl::producer Session::itemIdChanged() const { void Session::requestItemRepaint(not_null item) { _itemRepaintRequest.fire_copy(item); - enumerateItemViews(item, [&](not_null view) { - requestViewRepaint(view); - }); + auto repaintGroupLeader = false; + auto repaintView = [&](not_null view) { + if (view->isHiddenByGroup()) { + repaintGroupLeader = true; + } else { + requestViewRepaint(view); + } + }; + enumerateItemViews(item, repaintView); + if (repaintGroupLeader) { + if (const auto group = groups().find(item)) { + const auto leader = group->items.front(); + if (leader != item) { + enumerateItemViews(leader, repaintView); + } + } + } } rpl::producer> Session::itemRepaintRequest() const {