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) {
_widget->confirmDeleteSelected();
}
} else if (!(e->modifiers() & ~Qt::ShiftModifier)
&& e->key() != Qt::Key_Shift) {
_widget->tryProcessKeyInput(e);
} else {
e->ignore();
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<QKeyEvent*> e) = 0;
virtual rpl::producer<Data::MessagesSlice> listSource(
Data::MessagePosition aroundId,
int limitBefore,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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