Fix Ctrl+Up reply in topics / comments.

This commit is contained in:
John Preston 2024-05-28 15:00:45 +04:00
parent 275327c789
commit adc536b81d
4 changed files with 23 additions and 11 deletions

View file

@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "api/api_transcribes.h" #include "api/api_transcribes.h"
#include "api/api_who_reacted.h" #include "api/api_who_reacted.h"
#include "api/api_toggling_media.h" // Api::ToggleFavedSticker #include "api/api_toggling_media.h" // Api::ToggleFavedSticker
#include "base/qt/qt_key_modifiers.h"
#include "base/unixtime.h" #include "base/unixtime.h"
#include "history/view/history_view_list_widget.h" #include "history/view/history_view_list_widget.h"
#include "history/view/history_view_cursor_state.h" #include "history/view/history_view_cursor_state.h"
@ -636,7 +637,7 @@ bool AddReplyToMessageAction(
.messageId = itemId, .messageId = itemId,
.quote = quote.text, .quote = quote.text,
.quoteOffset = quote.offset, .quoteOffset = quote.offset,
}); }, base::IsCtrlPressed());
}, &st::menuIconReply); }, &st::menuIconReply);
return true; return true;
} }

View file

@ -3904,12 +3904,15 @@ bool ListWidget::lastMessageEditRequestNotify() const {
} }
} }
rpl::producer<FullReplyTo> ListWidget::replyToMessageRequested() const { auto ListWidget::replyToMessageRequested() const
-> rpl::producer<ReplyToMessageRequest> {
return _requestedToReplyToMessage.events(); return _requestedToReplyToMessage.events();
} }
void ListWidget::replyToMessageRequestNotify(FullReplyTo id) { void ListWidget::replyToMessageRequestNotify(
_requestedToReplyToMessage.fire(std::move(id)); FullReplyTo to,
bool forceAnotherChat) {
_requestedToReplyToMessage.fire({ std::move(to), forceAnotherChat });
} }
rpl::producer<FullMsgId> ListWidget::readMessageRequested() const { rpl::producer<FullMsgId> ListWidget::readMessageRequested() const {

View file

@ -286,11 +286,18 @@ public:
QPoint tooltipPos() const override; QPoint tooltipPos() const override;
bool tooltipWindowActive() const override; bool tooltipWindowActive() const override;
struct ReplyToMessageRequest {
FullReplyTo to;
bool forceAnotherChat = false;
};
[[nodiscard]] rpl::producer<FullMsgId> editMessageRequested() const; [[nodiscard]] rpl::producer<FullMsgId> editMessageRequested() const;
void editMessageRequestNotify(FullMsgId item) const; void editMessageRequestNotify(FullMsgId item) const;
[[nodiscard]] bool lastMessageEditRequestNotify() const; [[nodiscard]] bool lastMessageEditRequestNotify() const;
[[nodiscard]] rpl::producer<FullReplyTo> replyToMessageRequested() const; [[nodiscard]] auto replyToMessageRequested() const
void replyToMessageRequestNotify(FullReplyTo id); -> rpl::producer<ReplyToMessageRequest>;
void replyToMessageRequestNotify(
FullReplyTo to,
bool forceAnotherChat = false);
[[nodiscard]] rpl::producer<FullMsgId> readMessageRequested() const; [[nodiscard]] rpl::producer<FullMsgId> readMessageRequested() const;
[[nodiscard]] rpl::producer<FullMsgId> showMessageRequested() const; [[nodiscard]] rpl::producer<FullMsgId> showMessageRequested() const;
void replyNextMessage(FullMsgId fullId, bool next = true); void replyNextMessage(FullMsgId fullId, bool next = true);
@ -760,7 +767,7 @@ private:
base::Timer _touchScrollTimer; base::Timer _touchScrollTimer;
rpl::event_stream<FullMsgId> _requestedToEditMessage; rpl::event_stream<FullMsgId> _requestedToEditMessage;
rpl::event_stream<FullReplyTo> _requestedToReplyToMessage; rpl::event_stream<ReplyToMessageRequest> _requestedToReplyToMessage;
rpl::event_stream<FullMsgId> _requestedToReadMessage; rpl::event_stream<FullMsgId> _requestedToReadMessage;
rpl::event_stream<FullMsgId> _requestedToShowMessage; rpl::event_stream<FullMsgId> _requestedToShowMessage;

View file

@ -323,14 +323,15 @@ RepliesWidget::RepliesWidget(
}, _inner->lifetime()); }, _inner->lifetime());
_inner->replyToMessageRequested( _inner->replyToMessageRequested(
) | rpl::start_with_next([=](auto fullId) { ) | rpl::start_with_next([=](ListWidget::ReplyToMessageRequest request) {
const auto canSendReply = _topic const auto canSendReply = _topic
? Data::CanSendAnything(_topic) ? Data::CanSendAnything(_topic)
: Data::CanSendAnything(_history->peer); : Data::CanSendAnything(_history->peer);
if (_joinGroup || !canSendReply || base::IsCtrlPressed()) { const auto &to = request.to;
Controls::ShowReplyToChatBox(controller->uiShow(), { fullId }); if (_joinGroup || !canSendReply || request.forceAnotherChat) {
Controls::ShowReplyToChatBox(controller->uiShow(), { to });
} else { } else {
replyToMessage(fullId); replyToMessage(to);
_composeControls->focus(); _composeControls->focus();
} }
}, _inner->lifetime()); }, _inner->lifetime());