On typing in messages selection focus input field.

This commit is contained in:
John Preston 2023-06-26 16:44:02 +04:00
parent a57e9990b0
commit 21543338d7
13 changed files with 38 additions and 0 deletions

View File

@ -2915,6 +2915,9 @@ void HistoryInner::keyPressEvent(QKeyEvent *e) {
&& selectedState.canDeleteCount == selectedState.count) { && selectedState.canDeleteCount == selectedState.count) {
_widget->confirmDeleteSelected(); _widget->confirmDeleteSelected();
} }
} else if (!(e->modifiers() & ~Qt::ShiftModifier)
&& e->key() != Qt::Key_Shift) {
_widget->tryProcessKeyInput(e);
} else { } else {
e->ignore(); e->ignore();
} }

View File

@ -1803,6 +1803,13 @@ bool HistoryWidget::notify_switchInlineBotButtonReceived(
return false; return false;
} }
void HistoryWidget::tryProcessKeyInput(not_null<QKeyEvent*> e) {
if (_canSendTexts && _field->isVisible()) {
_field->setFocusFast();
QCoreApplication::sendEvent(_field->rawTextEdit(), e);
}
}
void HistoryWidget::setupShortcuts() { void HistoryWidget::setupShortcuts() {
Shortcuts::Requests( Shortcuts::Requests(
) | rpl::filter([=] { ) | rpl::filter([=] {

View File

@ -280,6 +280,8 @@ public:
bool notify_switchInlineBotButtonReceived(const QString &query, UserData *samePeerBot, MsgId samePeerReplyTo); bool notify_switchInlineBotButtonReceived(const QString &query, UserData *samePeerBot, MsgId samePeerReplyTo);
void tryProcessKeyInput(not_null<QKeyEvent*> e);
~HistoryWidget(); ~HistoryWidget();
protected: protected:

View File

@ -2843,6 +2843,13 @@ bool ComposeControls::handleCancelRequest() {
return false; return false;
} }
void ComposeControls::tryProcessKeyInput(not_null<QKeyEvent*> e) {
if (_field->isVisible()) {
_field->setFocusFast();
QCoreApplication::sendEvent(_field->rawTextEdit(), e);
}
}
void ComposeControls::initWebpageProcess() { void ComposeControls::initWebpageProcess() {
if (!_history) { if (!_history) {
_preview = nullptr; _preview = nullptr;

View File

@ -200,6 +200,7 @@ public:
void cancelForward(); void cancelForward();
bool handleCancelRequest(); bool handleCancelRequest();
void tryProcessKeyInput(not_null<QKeyEvent*> e);
[[nodiscard]] TextWithTags getTextWithAppliedMarkdown() const; [[nodiscard]] TextWithTags getTextWithAppliedMarkdown() const;
[[nodiscard]] WebPageId webPageId() const; [[nodiscard]] WebPageId webPageId() const;

View File

@ -2460,6 +2460,9 @@ void ListWidget::keyPressEvent(QKeyEvent *e) {
#endif // Q_OS_MAC #endif // Q_OS_MAC
} else if (e == QKeySequence::Delete) { } else if (e == QKeySequence::Delete) {
_delegate->listDeleteRequest(); _delegate->listDeleteRequest();
} else if (!(e->modifiers() & ~Qt::ShiftModifier)
&& e->key() != Qt::Key_Shift) {
_delegate->listTryProcessKeyInput(e);
} else { } else {
e->ignore(); e->ignore();
} }

View File

@ -93,6 +93,7 @@ public:
virtual bool listScrollTo(int top, bool syntetic = true) = 0; virtual bool listScrollTo(int top, bool syntetic = true) = 0;
virtual void listCancelRequest() = 0; virtual void listCancelRequest() = 0;
virtual void listDeleteRequest() = 0; virtual void listDeleteRequest() = 0;
virtual void listTryProcessKeyInput(not_null<QKeyEvent*> e) = 0;
virtual rpl::producer<Data::MessagesSlice> listSource( virtual rpl::producer<Data::MessagesSlice> listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,

View File

@ -497,6 +497,9 @@ void PinnedWidget::listDeleteRequest() {
confirmDeleteSelected(); confirmDeleteSelected();
} }
void PinnedWidget::listTryProcessKeyInput(not_null<QKeyEvent*> e) {
}
rpl::producer<Data::MessagesSlice> PinnedWidget::listSource( rpl::producer<Data::MessagesSlice> PinnedWidget::listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,

View File

@ -82,6 +82,7 @@ public:
bool listScrollTo(int top, bool syntetic = true) override; bool listScrollTo(int top, bool syntetic = true) override;
void listCancelRequest() override; void listCancelRequest() override;
void listDeleteRequest() override; void listDeleteRequest() override;
void listTryProcessKeyInput(not_null<QKeyEvent*> e) override;
rpl::producer<Data::MessagesSlice> listSource( rpl::producer<Data::MessagesSlice> listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,

View File

@ -2383,6 +2383,10 @@ void RepliesWidget::listDeleteRequest() {
confirmDeleteSelected(); confirmDeleteSelected();
} }
void RepliesWidget::listTryProcessKeyInput(not_null<QKeyEvent*> e) {
_composeControls->tryProcessKeyInput(e);
}
rpl::producer<Data::MessagesSlice> RepliesWidget::listSource( rpl::producer<Data::MessagesSlice> RepliesWidget::listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,

View File

@ -126,6 +126,7 @@ public:
bool listScrollTo(int top, bool syntetic = true) override; bool listScrollTo(int top, bool syntetic = true) override;
void listCancelRequest() override; void listCancelRequest() override;
void listDeleteRequest() override; void listDeleteRequest() override;
void listTryProcessKeyInput(not_null<QKeyEvent*> e) override;
rpl::producer<Data::MessagesSlice> listSource( rpl::producer<Data::MessagesSlice> listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,

View File

@ -1078,6 +1078,10 @@ void ScheduledWidget::listDeleteRequest() {
confirmDeleteSelected(); confirmDeleteSelected();
} }
void ScheduledWidget::listTryProcessKeyInput(not_null<QKeyEvent*> e) {
_composeControls->tryProcessKeyInput(e);
}
rpl::producer<Data::MessagesSlice> ScheduledWidget::listSource( rpl::producer<Data::MessagesSlice> ScheduledWidget::listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,

View File

@ -104,6 +104,7 @@ public:
bool listScrollTo(int top, bool syntetic = true) override; bool listScrollTo(int top, bool syntetic = true) override;
void listCancelRequest() override; void listCancelRequest() override;
void listDeleteRequest() override; void listDeleteRequest() override;
void listTryProcessKeyInput(not_null<QKeyEvent*> e) override;
rpl::producer<Data::MessagesSlice> listSource( rpl::producer<Data::MessagesSlice> listSource(
Data::MessagePosition aroundId, Data::MessagePosition aroundId,
int limitBefore, int limitBefore,