diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 390578393..559a98ccd 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_transcribes.h" #include "api/api_who_reacted.h" #include "api/api_toggling_media.h" // Api::ToggleFavedSticker +#include "base/qt/qt_key_modifiers.h" #include "base/unixtime.h" #include "history/view/history_view_list_widget.h" #include "history/view/history_view_cursor_state.h" @@ -636,7 +637,7 @@ bool AddReplyToMessageAction( .messageId = itemId, .quote = quote.text, .quoteOffset = quote.offset, - }); + }, base::IsCtrlPressed()); }, &st::menuIconReply); return true; } diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index e849bd943..e31188605 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -3904,12 +3904,15 @@ bool ListWidget::lastMessageEditRequestNotify() const { } } -rpl::producer ListWidget::replyToMessageRequested() const { +auto ListWidget::replyToMessageRequested() const +-> rpl::producer { return _requestedToReplyToMessage.events(); } -void ListWidget::replyToMessageRequestNotify(FullReplyTo id) { - _requestedToReplyToMessage.fire(std::move(id)); +void ListWidget::replyToMessageRequestNotify( + FullReplyTo to, + bool forceAnotherChat) { + _requestedToReplyToMessage.fire({ std::move(to), forceAnotherChat }); } rpl::producer ListWidget::readMessageRequested() const { diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index b68e689e9..7770341d9 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -286,11 +286,18 @@ public: QPoint tooltipPos() const override; bool tooltipWindowActive() const override; + struct ReplyToMessageRequest { + FullReplyTo to; + bool forceAnotherChat = false; + }; [[nodiscard]] rpl::producer editMessageRequested() const; void editMessageRequestNotify(FullMsgId item) const; [[nodiscard]] bool lastMessageEditRequestNotify() const; - [[nodiscard]] rpl::producer replyToMessageRequested() const; - void replyToMessageRequestNotify(FullReplyTo id); + [[nodiscard]] auto replyToMessageRequested() const + -> rpl::producer; + void replyToMessageRequestNotify( + FullReplyTo to, + bool forceAnotherChat = false); [[nodiscard]] rpl::producer readMessageRequested() const; [[nodiscard]] rpl::producer showMessageRequested() const; void replyNextMessage(FullMsgId fullId, bool next = true); @@ -760,7 +767,7 @@ private: base::Timer _touchScrollTimer; rpl::event_stream _requestedToEditMessage; - rpl::event_stream _requestedToReplyToMessage; + rpl::event_stream _requestedToReplyToMessage; rpl::event_stream _requestedToReadMessage; rpl::event_stream _requestedToShowMessage; diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 7db2a2141..02d9c8412 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -323,14 +323,15 @@ RepliesWidget::RepliesWidget( }, _inner->lifetime()); _inner->replyToMessageRequested( - ) | rpl::start_with_next([=](auto fullId) { + ) | rpl::start_with_next([=](ListWidget::ReplyToMessageRequest request) { const auto canSendReply = _topic ? Data::CanSendAnything(_topic) : Data::CanSendAnything(_history->peer); - if (_joinGroup || !canSendReply || base::IsCtrlPressed()) { - Controls::ShowReplyToChatBox(controller->uiShow(), { fullId }); + const auto &to = request.to; + if (_joinGroup || !canSendReply || request.forceAnotherChat) { + Controls::ShowReplyToChatBox(controller->uiShow(), { to }); } else { - replyToMessage(fullId); + replyToMessage(to); _composeControls->focus(); } }, _inner->lifetime());