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_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;
}

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();
}
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<FullMsgId> ListWidget::readMessageRequested() const {

View file

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

View file

@ -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());