From 4e5f92b2d007df2a09f8dea77dec6a1077bc7be3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 17 Jul 2026 18:16:30 +0400 Subject: [PATCH] Treat community rows like forums in forward boxes. --- .../boxes/peer_list_controllers.cpp | 7 +++---- .../SourceFiles/boxes/peer_list_controllers.h | 3 +++ Telegram/SourceFiles/boxes/share_box.cpp | 13 ------------- .../SourceFiles/window/window_peer_menu.cpp | 18 ++++++++++++------ 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index dc8ab6cd9d..69c507d435 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -62,8 +62,9 @@ namespace { constexpr auto kSortByOnlineThrottle = 3 * crl::time(1000); constexpr auto kSearchPerPage = 50; -[[nodiscard]] Data::CommunityInfo *JoinedCommunityChats( - not_null peer) { +} // namespace + +Data::CommunityInfo *JoinedCommunityChats(not_null peer) { const auto channel = peer->asChannel(); const auto info = (channel && channel->isCommunity()) ? channel->communityInfo() @@ -71,8 +72,6 @@ constexpr auto kSearchPerPage = 50; return (info && !info->histories().empty()) ? info : nullptr; } -} // namespace - object_ptr PrepareContactsBox( not_null window) { using Mode = ContactsBoxController::SortMode; diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.h b/Telegram/SourceFiles/boxes/peer_list_controllers.h index 87484fe822..f238e858b1 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.h +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.h @@ -455,6 +455,9 @@ private: }; +[[nodiscard]] Data::CommunityInfo *JoinedCommunityChats( + not_null peer); + class ChooseCommunityChatBoxController final : public PeerListController , public base::has_weak_ptr { diff --git a/Telegram/SourceFiles/boxes/share_box.cpp b/Telegram/SourceFiles/boxes/share_box.cpp index e341f255a1..96551367d9 100644 --- a/Telegram/SourceFiles/boxes/share_box.cpp +++ b/Telegram/SourceFiles/boxes/share_box.cpp @@ -68,19 +68,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include -namespace { - -[[nodiscard]] Data::CommunityInfo *JoinedCommunityChats( - not_null peer) { - const auto channel = peer->asChannel(); - const auto info = (channel && channel->isCommunity()) - ? channel->communityInfo() - : nullptr; - return (info && !info->histories().empty()) ? info : nullptr; -} - -} // namespace - class ShareBox::Inner final : public Ui::RpWidget { public: Inner( diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index d3ab01c997..d00215ee43 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -2808,9 +2808,11 @@ object_ptr PrepareChooseRecipientBox( const auto count = delegate()->peerListSelectedRowsCount(); const auto forum = row->peer()->isForum(); const auto monoforum = row->peer()->isMonoforum(); - if (showLockedError(row) || (count && (forum || monoforum))) { + const auto community = JoinedCommunityChats(row->peer()); + if (showLockedError(row) + || (count && (forum || monoforum || community))) { return; - } else if (forum || monoforum) { + } else if (forum || monoforum || community) { ChooseRecipientBoxController::rowClicked(row); } else { delegate()->peerListSetRowChecked(row, !row->checked()); @@ -2828,7 +2830,8 @@ object_ptr PrepareChooseRecipientBox( } if (!row->checked() && !row->peer()->isForum() - && !row->peer()->isMonoforum()) { + && !row->peer()->isMonoforum() + && !JoinedCommunityChats(row->peer())) { auto menu = base::make_unique_q( parent, st::popupMenuWithIcons); @@ -3125,9 +3128,11 @@ base::weak_qptr ShowForwardMessagesBox( const auto count = delegate()->peerListSelectedRowsCount(); const auto forum = row->peer()->isForum(); const auto monoforum = row->peer()->isMonoforum(); - if (showLockedError(row) || (count && (forum || monoforum))) { + const auto community = JoinedCommunityChats(row->peer()); + if (showLockedError(row) + || (count && (forum || monoforum || community))) { return; - } else if (!count || forum || monoforum) { + } else if (!count || forum || monoforum || community) { ChooseRecipientBoxController::rowClicked(row); } else if (count) { delegate()->peerListSetRowChecked(row, !row->checked()); @@ -3140,7 +3145,8 @@ base::weak_qptr ShowForwardMessagesBox( not_null row) override final { if (!row->checked() && !row->peer()->isForum() - && !row->peer()->isMonoforum()) { + && !row->peer()->isMonoforum() + && !JoinedCommunityChats(row->peer())) { auto menu = base::make_unique_q( parent, st::popupMenuWithIcons);