diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 36a1a29e6..857803c17 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -2915,6 +2915,9 @@ void HistoryInner::keyPressEvent(QKeyEvent *e) { && selectedState.canDeleteCount == selectedState.count) { _widget->confirmDeleteSelected(); } + } else if (!(e->modifiers() & ~Qt::ShiftModifier) + && e->key() != Qt::Key_Shift) { + _widget->tryProcessKeyInput(e); } else { e->ignore(); } diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index e99b55c85..aaa9733fe 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -1803,6 +1803,13 @@ bool HistoryWidget::notify_switchInlineBotButtonReceived( return false; } +void HistoryWidget::tryProcessKeyInput(not_null e) { + if (_canSendTexts && _field->isVisible()) { + _field->setFocusFast(); + QCoreApplication::sendEvent(_field->rawTextEdit(), e); + } +} + void HistoryWidget::setupShortcuts() { Shortcuts::Requests( ) | rpl::filter([=] { diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index 46d8287b9..ae1f9bf54 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -280,6 +280,8 @@ public: bool notify_switchInlineBotButtonReceived(const QString &query, UserData *samePeerBot, MsgId samePeerReplyTo); + void tryProcessKeyInput(not_null e); + ~HistoryWidget(); protected: 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 235091a00..089767c2c 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -2843,6 +2843,13 @@ bool ComposeControls::handleCancelRequest() { return false; } +void ComposeControls::tryProcessKeyInput(not_null e) { + if (_field->isVisible()) { + _field->setFocusFast(); + QCoreApplication::sendEvent(_field->rawTextEdit(), e); + } +} + void ComposeControls::initWebpageProcess() { if (!_history) { _preview = nullptr; diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h index f8c887593..fa63a8b3d 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h @@ -200,6 +200,7 @@ public: void cancelForward(); bool handleCancelRequest(); + void tryProcessKeyInput(not_null e); [[nodiscard]] TextWithTags getTextWithAppliedMarkdown() const; [[nodiscard]] WebPageId webPageId() const; diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index f45f4f62b..9ca933844 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -2460,6 +2460,9 @@ void ListWidget::keyPressEvent(QKeyEvent *e) { #endif // Q_OS_MAC } else if (e == QKeySequence::Delete) { _delegate->listDeleteRequest(); + } else if (!(e->modifiers() & ~Qt::ShiftModifier) + && e->key() != Qt::Key_Shift) { + _delegate->listTryProcessKeyInput(e); } else { e->ignore(); } diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index ad3517723..704fb1685 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -93,6 +93,7 @@ public: virtual bool listScrollTo(int top, bool syntetic = true) = 0; virtual void listCancelRequest() = 0; virtual void listDeleteRequest() = 0; + virtual void listTryProcessKeyInput(not_null e) = 0; virtual rpl::producer listSource( Data::MessagePosition aroundId, int limitBefore, diff --git a/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp b/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp index 263d057ff..0fbaf0349 100644 --- a/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp @@ -497,6 +497,9 @@ void PinnedWidget::listDeleteRequest() { confirmDeleteSelected(); } +void PinnedWidget::listTryProcessKeyInput(not_null e) { +} + rpl::producer PinnedWidget::listSource( Data::MessagePosition aroundId, int limitBefore, diff --git a/Telegram/SourceFiles/history/view/history_view_pinned_section.h b/Telegram/SourceFiles/history/view/history_view_pinned_section.h index 1ee0a9b7d..7125a1f18 100644 --- a/Telegram/SourceFiles/history/view/history_view_pinned_section.h +++ b/Telegram/SourceFiles/history/view/history_view_pinned_section.h @@ -82,6 +82,7 @@ public: bool listScrollTo(int top, bool syntetic = true) override; void listCancelRequest() override; void listDeleteRequest() override; + void listTryProcessKeyInput(not_null e) override; rpl::producer listSource( Data::MessagePosition aroundId, int limitBefore, diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 65c9e503a..7b878ec52 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -2383,6 +2383,10 @@ void RepliesWidget::listDeleteRequest() { confirmDeleteSelected(); } +void RepliesWidget::listTryProcessKeyInput(not_null e) { + _composeControls->tryProcessKeyInput(e); +} + rpl::producer RepliesWidget::listSource( Data::MessagePosition aroundId, int limitBefore, diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.h b/Telegram/SourceFiles/history/view/history_view_replies_section.h index a8645a5c5..b048dca36 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.h +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.h @@ -126,6 +126,7 @@ public: bool listScrollTo(int top, bool syntetic = true) override; void listCancelRequest() override; void listDeleteRequest() override; + void listTryProcessKeyInput(not_null e) override; rpl::producer listSource( Data::MessagePosition aroundId, int limitBefore, diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp index ca5e7b8bd..602f46ae2 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp @@ -1078,6 +1078,10 @@ void ScheduledWidget::listDeleteRequest() { confirmDeleteSelected(); } +void ScheduledWidget::listTryProcessKeyInput(not_null e) { + _composeControls->tryProcessKeyInput(e); +} + rpl::producer ScheduledWidget::listSource( Data::MessagePosition aroundId, int limitBefore, diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.h b/Telegram/SourceFiles/history/view/history_view_scheduled_section.h index acbec32d8..2173d3dcc 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.h +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.h @@ -104,6 +104,7 @@ public: bool listScrollTo(int top, bool syntetic = true) override; void listCancelRequest() override; void listDeleteRequest() override; + void listTryProcessKeyInput(not_null e) override; rpl::producer listSource( Data::MessagePosition aroundId, int limitBefore,