From 9e83562bf47207d2cd6f80f6d56dec781d335324 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 13 Nov 2024 21:59:49 +0300 Subject: [PATCH] Fixed display of pinned chats from main list in forward box. --- .../SourceFiles/window/window_peer_menu.cpp | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 068708c4e..b610c07a6 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -2061,18 +2061,32 @@ QPointer ShowForwardMessagesBox( if (list.size() <= 1) { return; } - const auto pinned = filters.chatsList(id)->pinned()->order(); + const auto pinned = [&] { + const auto &list = id + ? filters.chatsList(id) + : session->data().chatsList(nullptr); + const auto pinned = list->pinned()->order(); + auto peers = std::vector>(); + peers.reserve(pinned.size()); + auto foundSelf = !!id; + for (const auto &pin : pinned) { + if (!foundSelf && pin.peer()->isSelf()) { + peers.insert(peers.begin(), pin.peer()); + foundSelf = true; + } else { + peers.push_back(pin.peer()); + } + } + if (!foundSelf) { + peers.insert(peers.begin(), session->user()); + } + return peers; + }(); box->peerListSortRows([&]( const PeerListRow &r1, const PeerListRow &r2) { - const auto it1 = ranges::find_if(pinned, [&]( - const Dialogs::Key &k) { - return k.peer() == r1.peer(); - }); - const auto it2 = ranges::find_if(pinned, [&]( - const Dialogs::Key &k) { - return k.peer() == r2.peer(); - }); + const auto it1 = ranges::find(pinned, r1.peer()); + const auto it2 = ranges::find(pinned, r2.peer()); if (it1 == pinned.end() && it2 != pinned.end()) { return false; } else if (it2 == pinned.end() && it1 != pinned.end()) {