Merge pull request #5381 from zhaowenlan1779/swkbd-another-fix

applets/swkbd: Properly handle button_text
This commit is contained in:
Pengfei Zhu 2020-06-08 22:04:49 +08:00 committed by GitHub
commit e6ad0d390e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 38 deletions

View File

@ -34,33 +34,21 @@ QtKeyboardDialog::QtKeyboardDialog(QWidget* parent, QtKeyboard* keyboard_)
// Initialize buttons // Initialize buttons
switch (config.button_config) { switch (config.button_config) {
case ButtonConfig::Triple: case ButtonConfig::Triple:
buttons->addButton(config.has_custom_button_text buttons->addButton(config.button_text[1].empty()
? QString::fromStdString(config.button_text[2]) ? tr(SWKBD_BUTTON_FORGOT)
: tr(SWKBD_BUTTON_OKAY), : QString::fromStdString(config.button_text[1]),
QDialogButtonBox::ButtonRole::AcceptRole);
buttons->addButton(config.has_custom_button_text
? QString::fromStdString(config.button_text[1])
: tr(SWKBD_BUTTON_FORGOT),
QDialogButtonBox::ButtonRole::HelpRole); QDialogButtonBox::ButtonRole::HelpRole);
buttons->addButton(config.has_custom_button_text [[fallthrough]];
? QString::fromStdString(config.button_text[0])
: tr(SWKBD_BUTTON_CANCEL),
QDialogButtonBox::ButtonRole::RejectRole);
break;
case ButtonConfig::Dual: case ButtonConfig::Dual:
buttons->addButton(config.has_custom_button_text buttons->addButton(config.button_text[0].empty()
? QString::fromStdString(config.button_text[2]) ? tr(SWKBD_BUTTON_CANCEL)
: tr(SWKBD_BUTTON_OKAY), : QString::fromStdString(config.button_text[0]),
QDialogButtonBox::ButtonRole::AcceptRole);
buttons->addButton(config.has_custom_button_text
? QString::fromStdString(config.button_text[0])
: tr(SWKBD_BUTTON_CANCEL),
QDialogButtonBox::ButtonRole::RejectRole); QDialogButtonBox::ButtonRole::RejectRole);
break; [[fallthrough]];
case ButtonConfig::Single: case ButtonConfig::Single:
buttons->addButton(config.has_custom_button_text buttons->addButton(config.button_text[2].empty()
? QString::fromStdString(config.button_text[2]) ? tr(SWKBD_BUTTON_OKAY)
: tr(SWKBD_BUTTON_OKAY), : QString::fromStdString(config.button_text[2]),
QDialogButtonBox::ButtonRole::AcceptRole); QDialogButtonBox::ButtonRole::AcceptRole);
break; break;
case ButtonConfig::None: case ButtonConfig::None:

View File

@ -38,12 +38,11 @@ constexpr char SWKBD_BUTTON_FORGOT[] = "I Forgot";
/// later learn is needed can be added here and filled in by the backend HLE applet /// later learn is needed can be added here and filled in by the backend HLE applet
struct KeyboardConfig { struct KeyboardConfig {
ButtonConfig button_config; ButtonConfig button_config;
AcceptedInput accept_mode; /// What kinds of input are accepted (blank/empty/fixed width) AcceptedInput accept_mode; /// What kinds of input are accepted (blank/empty/fixed width)
bool multiline_mode; /// True if the keyboard accepts multiple lines of input bool multiline_mode; /// True if the keyboard accepts multiple lines of input
u16 max_text_length; /// Maximum number of letters allowed if its a text input u16 max_text_length; /// Maximum number of letters allowed if its a text input
u16 max_digits; /// Maximum number of numbers allowed if its a number input u16 max_digits; /// Maximum number of numbers allowed if its a number input
std::string hint_text; /// Displayed in the field as a hint before std::string hint_text; /// Displayed in the field as a hint before
bool has_custom_button_text; /// If true, use the button_text instead
std::vector<std::string> button_text; /// Contains the button text that the caller provides std::vector<std::string> button_text; /// Contains the button text that the caller provides
struct Filters { struct Filters {
bool prevent_digit; /// Limit maximum digit count to max_digits bool prevent_digit; /// Limit maximum digit count to max_digits

View File

@ -194,15 +194,8 @@ Frontend::KeyboardConfig SoftwareKeyboard::ToFrontendConfig(
frontend_config.max_text_length = config.max_text_length; frontend_config.max_text_length = config.max_text_length;
frontend_config.max_digits = config.max_digits; frontend_config.max_digits = config.max_digits;
frontend_config.hint_text = Common::UTF16BufferToUTF8(config.hint_text); frontend_config.hint_text = Common::UTF16BufferToUTF8(config.hint_text);
frontend_config.has_custom_button_text = for (const auto& text : config.button_text) {
!std::all_of(config.button_text.begin(), config.button_text.end(), frontend_config.button_text.push_back(Common::UTF16BufferToUTF8(text));
[](std::array<u16, HLE::Applets::MAX_BUTTON_TEXT_LEN + 1> x) {
return std::all_of(x.begin(), x.end(), [](u16 x) { return x == 0; });
});
if (frontend_config.has_custom_button_text) {
for (const auto& text : config.button_text) {
frontend_config.button_text.push_back(Common::UTF16BufferToUTF8(text));
}
} }
frontend_config.filters.prevent_digit = frontend_config.filters.prevent_digit =
static_cast<bool>(config.filter_flags & SoftwareKeyboardFilter::Digits); static_cast<bool>(config.filter_flags & SoftwareKeyboardFilter::Digits);