mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-25 10:52:48 -06:00
Merge pull request #7303 from Morph1984/swkbd-confirm-skip-textcheck
applets/swkbd: Skip text checking if the text has been confirmed
This commit is contained in:
commit
bdabd17c76
8 changed files with 51 additions and 33 deletions
|
@ -16,7 +16,8 @@ DefaultSoftwareKeyboardApplet::~DefaultSoftwareKeyboardApplet() = default;
|
||||||
|
|
||||||
void DefaultSoftwareKeyboardApplet::InitializeKeyboard(
|
void DefaultSoftwareKeyboardApplet::InitializeKeyboard(
|
||||||
bool is_inline, KeyboardInitializeParameters initialize_parameters,
|
bool is_inline, KeyboardInitializeParameters initialize_parameters,
|
||||||
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)> submit_normal_callback_,
|
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
|
submit_normal_callback_,
|
||||||
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback_) {
|
submit_inline_callback_) {
|
||||||
if (is_inline) {
|
if (is_inline) {
|
||||||
|
@ -128,7 +129,7 @@ void DefaultSoftwareKeyboardApplet::ExitKeyboard() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultSoftwareKeyboardApplet::SubmitNormalText(std::u16string text) const {
|
void DefaultSoftwareKeyboardApplet::SubmitNormalText(std::u16string text) const {
|
||||||
submit_normal_callback(Service::AM::Applets::SwkbdResult::Ok, text);
|
submit_normal_callback(Service::AM::Applets::SwkbdResult::Ok, text, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultSoftwareKeyboardApplet::SubmitInlineText(std::u16string_view text) const {
|
void DefaultSoftwareKeyboardApplet::SubmitInlineText(std::u16string_view text) const {
|
||||||
|
|
|
@ -57,7 +57,7 @@ public:
|
||||||
|
|
||||||
virtual void InitializeKeyboard(
|
virtual void InitializeKeyboard(
|
||||||
bool is_inline, KeyboardInitializeParameters initialize_parameters,
|
bool is_inline, KeyboardInitializeParameters initialize_parameters,
|
||||||
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)>
|
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
submit_normal_callback_,
|
submit_normal_callback_,
|
||||||
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback_) = 0;
|
submit_inline_callback_) = 0;
|
||||||
|
@ -82,7 +82,7 @@ public:
|
||||||
|
|
||||||
void InitializeKeyboard(
|
void InitializeKeyboard(
|
||||||
bool is_inline, KeyboardInitializeParameters initialize_parameters,
|
bool is_inline, KeyboardInitializeParameters initialize_parameters,
|
||||||
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)>
|
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
submit_normal_callback_,
|
submit_normal_callback_,
|
||||||
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback_) override;
|
submit_inline_callback_) override;
|
||||||
|
@ -106,7 +106,7 @@ private:
|
||||||
|
|
||||||
KeyboardInitializeParameters parameters;
|
KeyboardInitializeParameters parameters;
|
||||||
|
|
||||||
mutable std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)>
|
mutable std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
submit_normal_callback;
|
submit_normal_callback;
|
||||||
mutable std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
mutable std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback;
|
submit_inline_callback;
|
||||||
|
|
|
@ -109,13 +109,18 @@ void SoftwareKeyboard::Execute() {
|
||||||
ShowNormalKeyboard();
|
ShowNormalKeyboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftwareKeyboard::SubmitTextNormal(SwkbdResult result, std::u16string submitted_text) {
|
void SoftwareKeyboard::SubmitTextNormal(SwkbdResult result, std::u16string submitted_text,
|
||||||
|
bool confirmed) {
|
||||||
if (complete) {
|
if (complete) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swkbd_config_common.use_text_check && result == SwkbdResult::Ok) {
|
if (swkbd_config_common.use_text_check && result == SwkbdResult::Ok) {
|
||||||
SubmitForTextCheck(submitted_text);
|
if (confirmed) {
|
||||||
|
SubmitNormalOutputAndExit(result, submitted_text);
|
||||||
|
} else {
|
||||||
|
SubmitForTextCheck(submitted_text);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
SubmitNormalOutputAndExit(result, submitted_text);
|
SubmitNormalOutputAndExit(result, submitted_text);
|
||||||
}
|
}
|
||||||
|
@ -273,13 +278,21 @@ void SoftwareKeyboard::ProcessTextCheck() {
|
||||||
|
|
||||||
std::memcpy(&swkbd_text_check, text_check_data.data(), sizeof(SwkbdTextCheck));
|
std::memcpy(&swkbd_text_check, text_check_data.data(), sizeof(SwkbdTextCheck));
|
||||||
|
|
||||||
std::u16string text_check_message =
|
std::u16string text_check_message = [this, &swkbd_text_check]() -> std::u16string {
|
||||||
swkbd_text_check.text_check_result == SwkbdTextCheckResult::Failure ||
|
if (swkbd_text_check.text_check_result == SwkbdTextCheckResult::Failure ||
|
||||||
swkbd_text_check.text_check_result == SwkbdTextCheckResult::Confirm
|
swkbd_text_check.text_check_result == SwkbdTextCheckResult::Confirm) {
|
||||||
? Common::UTF16StringFromFixedZeroTerminatedBuffer(
|
return swkbd_config_common.use_utf8
|
||||||
swkbd_text_check.text_check_message.data(),
|
? Common::UTF8ToUTF16(Common::StringFromFixedZeroTerminatedBuffer(
|
||||||
swkbd_text_check.text_check_message.size())
|
reinterpret_cast<const char*>(
|
||||||
: u"";
|
swkbd_text_check.text_check_message.data()),
|
||||||
|
swkbd_text_check.text_check_message.size() * sizeof(char16_t)))
|
||||||
|
: Common::UTF16StringFromFixedZeroTerminatedBuffer(
|
||||||
|
swkbd_text_check.text_check_message.data(),
|
||||||
|
swkbd_text_check.text_check_message.size());
|
||||||
|
} else {
|
||||||
|
return u"";
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
LOG_INFO(Service_AM, "\nTextCheckResult: {}\nTextCheckMessage: {}",
|
LOG_INFO(Service_AM, "\nTextCheckResult: {}\nTextCheckMessage: {}",
|
||||||
GetTextCheckResultName(swkbd_text_check.text_check_result),
|
GetTextCheckResultName(swkbd_text_check.text_check_result),
|
||||||
|
@ -583,11 +596,12 @@ void SoftwareKeyboard::InitializeFrontendKeyboard() {
|
||||||
.disable_cancel_button{disable_cancel_button},
|
.disable_cancel_button{disable_cancel_button},
|
||||||
};
|
};
|
||||||
|
|
||||||
frontend.InitializeKeyboard(false, std::move(initialize_parameters),
|
frontend.InitializeKeyboard(
|
||||||
[this](SwkbdResult result, std::u16string submitted_text) {
|
false, std::move(initialize_parameters),
|
||||||
SubmitTextNormal(result, submitted_text);
|
[this](SwkbdResult result, std::u16string submitted_text, bool confirmed) {
|
||||||
},
|
SubmitTextNormal(result, submitted_text, confirmed);
|
||||||
{});
|
},
|
||||||
|
{});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,9 @@ public:
|
||||||
*
|
*
|
||||||
* @param result SwkbdResult enum
|
* @param result SwkbdResult enum
|
||||||
* @param submitted_text UTF-16 encoded string
|
* @param submitted_text UTF-16 encoded string
|
||||||
|
* @param confirmed Whether the text has been confirmed after TextCheckResult::Confirm
|
||||||
*/
|
*/
|
||||||
void SubmitTextNormal(SwkbdResult result, std::u16string submitted_text);
|
void SubmitTextNormal(SwkbdResult result, std::u16string submitted_text, bool confirmed);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submits the input text to the application.
|
* Submits the input text to the application.
|
||||||
|
|
|
@ -413,7 +413,7 @@ void QtSoftwareKeyboardDialog::ShowTextCheckDialog(
|
||||||
? ui->text_edit_osk->toPlainText().toStdU16String()
|
? ui->text_edit_osk->toPlainText().toStdU16String()
|
||||||
: ui->line_edit_osk->text().toStdU16String();
|
: ui->line_edit_osk->text().toStdU16String();
|
||||||
|
|
||||||
emit SubmitNormalText(SwkbdResult::Ok, std::move(text));
|
emit SubmitNormalText(SwkbdResult::Ok, std::move(text), true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1510,7 +1510,8 @@ QtSoftwareKeyboard::~QtSoftwareKeyboard() = default;
|
||||||
|
|
||||||
void QtSoftwareKeyboard::InitializeKeyboard(
|
void QtSoftwareKeyboard::InitializeKeyboard(
|
||||||
bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters,
|
bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters,
|
||||||
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)> submit_normal_callback_,
|
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
|
submit_normal_callback_,
|
||||||
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback_) {
|
submit_inline_callback_) {
|
||||||
if (is_inline) {
|
if (is_inline) {
|
||||||
|
@ -1609,8 +1610,8 @@ void QtSoftwareKeyboard::ExitKeyboard() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtSoftwareKeyboard::SubmitNormalText(Service::AM::Applets::SwkbdResult result,
|
void QtSoftwareKeyboard::SubmitNormalText(Service::AM::Applets::SwkbdResult result,
|
||||||
std::u16string submitted_text) const {
|
std::u16string submitted_text, bool confirmed) const {
|
||||||
submit_normal_callback(result, submitted_text);
|
submit_normal_callback(result, submitted_text, confirmed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtSoftwareKeyboard::SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
void QtSoftwareKeyboard::SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
||||||
|
|
|
@ -51,8 +51,8 @@ public:
|
||||||
void ExitKeyboard();
|
void ExitKeyboard();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void SubmitNormalText(Service::AM::Applets::SwkbdResult result,
|
void SubmitNormalText(Service::AM::Applets::SwkbdResult result, std::u16string submitted_text,
|
||||||
std::u16string submitted_text) const;
|
bool confirmed = false) const;
|
||||||
|
|
||||||
void SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
void SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
||||||
std::u16string submitted_text, s32 cursor_position) const;
|
std::u16string submitted_text, s32 cursor_position) const;
|
||||||
|
@ -234,7 +234,7 @@ public:
|
||||||
|
|
||||||
void InitializeKeyboard(
|
void InitializeKeyboard(
|
||||||
bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters,
|
bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters,
|
||||||
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)>
|
std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
submit_normal_callback_,
|
submit_normal_callback_,
|
||||||
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback_) override;
|
submit_inline_callback_) override;
|
||||||
|
@ -272,13 +272,13 @@ signals:
|
||||||
void MainWindowExitKeyboard() const;
|
void MainWindowExitKeyboard() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SubmitNormalText(Service::AM::Applets::SwkbdResult result,
|
void SubmitNormalText(Service::AM::Applets::SwkbdResult result, std::u16string submitted_text,
|
||||||
std::u16string submitted_text) const;
|
bool confirmed) const;
|
||||||
|
|
||||||
void SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
void SubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
||||||
std::u16string submitted_text, s32 cursor_position) const;
|
std::u16string submitted_text, s32 cursor_position) const;
|
||||||
|
|
||||||
mutable std::function<void(Service::AM::Applets::SwkbdResult, std::u16string)>
|
mutable std::function<void(Service::AM::Applets::SwkbdResult, std::u16string, bool)>
|
||||||
submit_normal_callback;
|
submit_normal_callback;
|
||||||
mutable std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
mutable std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>
|
||||||
submit_inline_callback;
|
submit_inline_callback;
|
||||||
|
|
|
@ -483,8 +483,9 @@ void GMainWindow::SoftwareKeyboardInitialize(
|
||||||
} else {
|
} else {
|
||||||
connect(
|
connect(
|
||||||
software_keyboard, &QtSoftwareKeyboardDialog::SubmitNormalText, this,
|
software_keyboard, &QtSoftwareKeyboardDialog::SubmitNormalText, this,
|
||||||
[this](Service::AM::Applets::SwkbdResult result, std::u16string submitted_text) {
|
[this](Service::AM::Applets::SwkbdResult result, std::u16string submitted_text,
|
||||||
emit SoftwareKeyboardSubmitNormalText(result, submitted_text);
|
bool confirmed) {
|
||||||
|
emit SoftwareKeyboardSubmitNormalText(result, submitted_text, confirmed);
|
||||||
},
|
},
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,7 +150,7 @@ signals:
|
||||||
void ProfileSelectorFinishedSelection(std::optional<Common::UUID> uuid);
|
void ProfileSelectorFinishedSelection(std::optional<Common::UUID> uuid);
|
||||||
|
|
||||||
void SoftwareKeyboardSubmitNormalText(Service::AM::Applets::SwkbdResult result,
|
void SoftwareKeyboardSubmitNormalText(Service::AM::Applets::SwkbdResult result,
|
||||||
std::u16string submitted_text);
|
std::u16string submitted_text, bool confirmed);
|
||||||
void SoftwareKeyboardSubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
void SoftwareKeyboardSubmitInlineText(Service::AM::Applets::SwkbdReplyType reply_type,
|
||||||
std::u16string submitted_text, s32 cursor_position);
|
std::u16string submitted_text, s32 cursor_position);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue