From c6d43a802ca1552e92195aa6aecb7a49589839b6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 9 May 2025 17:41:19 +0400 Subject: [PATCH] Fix sending messages in monoforums. --- .../history_view_compose_controls.cpp | 1 + .../view/history_view_chat_section.cpp | 22 ++++++++++++++----- .../view/history_view_top_bar_widget.cpp | 4 ++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index 50a49a7371..5e4f936f1f 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -1807,6 +1807,7 @@ Data::DraftKey ComposeControls::draftKey(DraftType type) const { switch (_currentDialogsEntryState.section) { case Section::History: case Section::Replies: + case Section::SavedSublist: return (type == DraftType::Edit) ? Key::LocalEdit(_topicRootId) : Key::Local(_topicRootId); diff --git a/Telegram/SourceFiles/history/view/history_view_chat_section.cpp b/Telegram/SourceFiles/history/view/history_view_chat_section.cpp index b70bc08ec7..50d61f25d7 100644 --- a/Telegram/SourceFiles/history/view/history_view_chat_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_chat_section.cpp @@ -658,7 +658,7 @@ HistoryItem *ChatWidget::lookupRepliesRoot() const { } Data::ForumTopic *ChatWidget::lookupTopic() { - if (!_repliesRoot) { + if (!_repliesRootId) { return nullptr; } else if (const auto forum = _history->asForum()) { if (const auto result = forum->topicFor(_repliesRootId)) { @@ -1692,15 +1692,29 @@ SendMenu::Details ChatWidget::sendMenuDetails() const { } FullReplyTo ChatWidget::replyTo() const { + const auto monoforumPeerId = (_sublist && _sublist->parentChat()) + ? _sublist->peer()->id + : PeerId(); if (auto custom = _composeControls->replyingToMessage()) { - custom.topicRootId = _repliesRootId; - return custom; + const auto item = custom.messageId + ? session().data().message(custom.messageId) + : nullptr; + const auto sublistPeer = item ? item->savedSublistPeer() : nullptr; + if (!item + || !monoforumPeerId + || (sublistPeer && sublistPeer->id == monoforumPeerId)) { + // Never answer to a message in a wrong monoforum peer id. + custom.topicRootId = _repliesRootId; + custom.monoforumPeerId = monoforumPeerId; + return custom; + } } return FullReplyTo{ .messageId = (_repliesRootId ? FullMsgId(_peer->id, _repliesRootId) : FullMsgId()), .topicRootId = _repliesRootId, + .monoforumPeerId = monoforumPeerId, }; } @@ -2318,8 +2332,6 @@ bool ChatWidget::showMessage( return false; } else if (_sublist && message->savedSublist() != _sublist) { return false; - } else { - Unexpected("ChatWidget::showMessage context."); } const auto originMessage = [&]() -> HistoryItem* { using OriginMessage = Window::SectionShow::OriginMessage; diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index 568d747b95..af060ea552 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -81,8 +81,8 @@ QString TopBarNameText( not_null peer, const Dialogs::EntryState &state) { if (state.section == Dialogs::EntryState::Section::SavedSublist - && state.key.history() - && state.key.history()->peer->isSelf()) { + && state.key.sublist() + && state.key.sublist()->parentHistory()->peer->isSelf()) { if (peer->isSelf()) { return tr::lng_my_notes(tr::now); } else if (peer->isSavedHiddenAuthor()) {