applets/swkbd: Properly handle button_text
I'm not sure why we decided to have a boolean here, but apparently that wasn't the correct behaviour. According to HW tests, the Software Keyboard simply displays the default text when the button text provided is empty (**not necessarily all zero**). For example, if you set a text for one of the buttons and leave others empty, the button you set will have your text, while others will have their default texts. Removed the boolean and updated frontend code to make it correct.
This commit is contained in:
parent
7dc472a3a7
commit
190a053987
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Reference in New Issue