From 28c125a3ec55d5d5054f44b26786869f8044cb44 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 21 Mar 2025 17:59:17 +0300 Subject: [PATCH] Added some special cases when quick dialog action can't be performed. --- .../dialogs/dialogs_quick_action.cpp | 12 +++++++++++- .../SourceFiles/window/window_peer_menu.cpp | 17 ++++++++++++----- Telegram/SourceFiles/window/window_peer_menu.h | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_quick_action.cpp b/Telegram/SourceFiles/dialogs/dialogs_quick_action.cpp index e1092d5c9d..8e546b0d30 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_quick_action.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_quick_action.cpp @@ -125,6 +125,9 @@ Ui::QuickDialogActionLabel ResolveQuickDialogLabel( Ui::QuickDialogAction action, FilterId filterId) { if (action == Dialogs::Ui::QuickDialogAction::Mute) { + if (history->peer->isSelf()) { + return Ui::QuickDialogActionLabel::Disabled; + } const auto isMuted = rpl::variable( MuteMenu::ThreadDescriptor(history).isMutedValue()).current(); return isMuted @@ -136,10 +139,17 @@ Ui::QuickDialogActionLabel ResolveQuickDialogLabel( ? Ui::QuickDialogActionLabel::Unpin : Ui::QuickDialogActionLabel::Pin; } else if (action == Dialogs::Ui::QuickDialogAction::Read) { - return Window::IsUnreadThread(history) + const auto unread = Window::IsUnreadThread(history); + if (history->isForum() && !unread) { + return Ui::QuickDialogActionLabel::Disabled; + } + return unread ? Ui::QuickDialogActionLabel::Read : Ui::QuickDialogActionLabel::Unread; } else if (action == Dialogs::Ui::QuickDialogAction::Archive) { + if (!Window::CanArchive(history, history->peer)) { + return Ui::QuickDialogActionLabel::Disabled; + } return Window::IsArchived(history) ? Ui::QuickDialogActionLabel::Unarchive : Ui::QuickDialogActionLabel::Archive; diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 9768688eed..6fbf2c3eb0 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -684,12 +684,8 @@ void Filler::addToggleArchive() { } const auto peer = _peer; const auto history = _request.key.history(); - if (history && history->useTopPromotion()) { + if (!CanArchive(history, peer)) { return; - } else if (peer->isNotificationsUser() || peer->isSelf()) { - if (!history || !history->folder()) { - return; - } } const auto isArchived = [=] { return IsArchived(history); @@ -3320,4 +3316,15 @@ bool IsArchived(not_null history) { return (history->folder() != nullptr); } +bool CanArchive(History *history, PeerData *peer) { + if (history && history->useTopPromotion()) { + return false; + } else if (peer && (peer->isNotificationsUser() || peer->isSelf())) { + if (!history || !history->folder()) { + return false; + } + } + return true; +} + } // namespace Window diff --git a/Telegram/SourceFiles/window/window_peer_menu.h b/Telegram/SourceFiles/window/window_peer_menu.h index e3adf079bf..5ad0c50813 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.h +++ b/Telegram/SourceFiles/window/window_peer_menu.h @@ -216,5 +216,6 @@ void MarkAsReadThread(not_null thread); void AddSeparatorAndShiftUp(const PeerMenuCallback &addAction); [[nodiscard]] bool IsArchived(not_null history); +[[nodiscard]] bool CanArchive(History *history, PeerData *peer); } // namespace Window