mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-12-28 06:06:55 +00:00
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
|
||||
switch (config.button_config) {
|
||||
case ButtonConfig::Triple:
|
||||
buttons->addButton(config.has_custom_button_text
|
||||
? QString::fromStdString(config.button_text[2])
|
||||
: tr(SWKBD_BUTTON_OKAY),
|
||||
QDialogButtonBox::ButtonRole::AcceptRole);
|
||||
buttons->addButton(config.has_custom_button_text
|
||||
? QString::fromStdString(config.button_text[1])
|
||||
: tr(SWKBD_BUTTON_FORGOT),
|
||||
buttons->addButton(config.button_text[1].empty()
|
||||
? tr(SWKBD_BUTTON_FORGOT)
|
||||
: QString::fromStdString(config.button_text[1]),
|
||||
QDialogButtonBox::ButtonRole::HelpRole);
|
||||
buttons->addButton(config.has_custom_button_text
|
||||
? QString::fromStdString(config.button_text[0])
|
||||
: tr(SWKBD_BUTTON_CANCEL),
|
||||
QDialogButtonBox::ButtonRole::RejectRole);
|
||||
break;
|
||||
// fallthrough
|
||||
case ButtonConfig::Dual:
|
||||
buttons->addButton(config.has_custom_button_text
|
||||
? QString::fromStdString(config.button_text[2])
|
||||
: tr(SWKBD_BUTTON_OKAY),
|
||||
QDialogButtonBox::ButtonRole::AcceptRole);
|
||||
buttons->addButton(config.has_custom_button_text
|
||||
? QString::fromStdString(config.button_text[0])
|
||||
: tr(SWKBD_BUTTON_CANCEL),
|
||||
buttons->addButton(config.button_text[0].empty()
|
||||
? tr(SWKBD_BUTTON_CANCEL)
|
||||
: QString::fromStdString(config.button_text[0]),
|
||||
QDialogButtonBox::ButtonRole::RejectRole);
|
||||
break;
|
||||
// fallthrough
|
||||
case ButtonConfig::Single:
|
||||
buttons->addButton(config.has_custom_button_text
|
||||
? QString::fromStdString(config.button_text[2])
|
||||
: tr(SWKBD_BUTTON_OKAY),
|
||||
buttons->addButton(config.button_text[2].empty()
|
||||
? tr(SWKBD_BUTTON_OKAY)
|
||||
: QString::fromStdString(config.button_text[2]),
|
||||
QDialogButtonBox::ButtonRole::AcceptRole);
|
||||
break;
|
||||
case ButtonConfig::None:
|
||||
|
|
|
@ -43,7 +43,6 @@ struct KeyboardConfig {
|
|||
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
|
||||
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
|
||||
struct Filters {
|
||||
bool prevent_digit; /// Limit maximum digit count to max_digits
|
||||
|
|
|
@ -194,16 +194,9 @@ Frontend::KeyboardConfig SoftwareKeyboard::ToFrontendConfig(
|
|||
frontend_config.max_text_length = config.max_text_length;
|
||||
frontend_config.max_digits = config.max_digits;
|
||||
frontend_config.hint_text = Common::UTF16BufferToUTF8(config.hint_text);
|
||||
frontend_config.has_custom_button_text =
|
||||
!std::all_of(config.button_text.begin(), config.button_text.end(),
|
||||
[](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 =
|
||||
static_cast<bool>(config.filter_flags & SoftwareKeyboardFilter::Digits);
|
||||
frontend_config.filters.prevent_at =
|
||||
|
|
Loading…
Reference in a new issue