From ee3d70f879bb7578496d83f4aa81e4c02571767a Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 4 Jun 2025 21:05:08 +0400 Subject: [PATCH] Fix glitching userpics in monoforum. --- .../history/view/history_view_subsection_tabs.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/history/view/history_view_subsection_tabs.cpp b/Telegram/SourceFiles/history/view/history_view_subsection_tabs.cpp index 73fb100f1f..207bd4b1cb 100644 --- a/Telegram/SourceFiles/history/view/history_view_subsection_tabs.cpp +++ b/Telegram/SourceFiles/history/view/history_view_subsection_tabs.cpp @@ -283,6 +283,12 @@ void SubsectionTabs::setupSlider( } }, scroll->lifetime()); + using ImagePointer = std::shared_ptr; + struct Cache { + base::flat_map, ImagePointer> userpics; + }; + const auto cache = std::make_shared(); + _refreshed.events_starting_with_copy( rpl::empty ) | rpl::start_with_next([=] { @@ -291,6 +297,7 @@ void SubsectionTabs::setupSlider( return _controller->isGifPausedAtLeastFor( Window::GifPauseReason::Any); }; + auto updated = Cache(); auto sections = std::vector(); auto activeIndex = -1; for (const auto &item : _slice) { @@ -337,9 +344,13 @@ void SubsectionTabs::setupSlider( } else if (const auto sublist = item.thread->asSublist()) { const auto peer = sublist->sublistPeer(); if (vertical) { + auto was = cache->userpics[peer]; + auto userpic = updated.userpics[peer] = was + ? was + : Ui::MakeUserpicThumbnail(peer); sections.push_back({ .text = peer->shortName(), - .userpic = Ui::MakeUserpicThumbnail(peer), + .userpic = std::move(userpic), }); } else { sections.push_back({ @@ -359,6 +370,7 @@ void SubsectionTabs::setupSlider( auto §ion = sections.back(); section.badges = item.badges; } + *cache = std::move(updated); auto scrollSavingThread = (Data::Thread*)nullptr; auto scrollSavingShift = 0;