yuzu-emu
/
yuzu-mainline
Archived
1
0
Fork 0

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:
Fernando S 2021-11-10 13:42:11 +01:00 committed by GitHub
commit bdabd17c76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 33 deletions

View File

@ -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 {

View File

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

View File

@ -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) {
if (confirmed) {
SubmitNormalOutputAndExit(result, submitted_text);
} else {
SubmitForTextCheck(submitted_text); 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
? Common::UTF8ToUTF16(Common::StringFromFixedZeroTerminatedBuffer(
reinterpret_cast<const char*>(
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.data(),
swkbd_text_check.text_check_message.size()) swkbd_text_check.text_check_message.size());
: u""; } 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,9 +596,10 @@ 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);
}, },
{}); {});
} }

View File

@ -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.

View File

@ -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,

View File

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

View File

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

View File

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