Prevent raw Unicode control codes from showing on software keyboard applet. (#3845)
* Revert "Add support for releasing a semaphore to DmaClass (#2926)" This reverts commit521a07e612
. * Revert "Revert "Add support for releasing a semaphore to DmaClass (#2926)"" This reverts commitec8a5fd053
. * Strip non-visible control codes from strings before they are sent to the software keyboard to prevent ugly unicode blocks from being shown on the UI. * remove debugging junk * Initialize stringbuilder capacity at the start to prevent resizing (a tiny tiny microoptimization) * Update remarks documentation. Remove unneeded imports. * Removing a test that's actually just redundant Co-authored-by: Logan Stromberg <lostromb@microsoft.com>
This commit is contained in:
parent
d536cc8ae6
commit
2c9ab5e45f
3 changed files with 112 additions and 4 deletions
|
@ -204,12 +204,11 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||
else
|
||||
{
|
||||
// Call the configured GUI handler to get user's input.
|
||||
|
||||
var args = new SoftwareKeyboardUiArgs
|
||||
{
|
||||
HeaderText = _keyboardForegroundConfig.HeaderText,
|
||||
SubtitleText = _keyboardForegroundConfig.SubtitleText,
|
||||
GuideText = _keyboardForegroundConfig.GuideText,
|
||||
HeaderText = StripUnicodeControlCodes(_keyboardForegroundConfig.HeaderText),
|
||||
SubtitleText = StripUnicodeControlCodes(_keyboardForegroundConfig.SubtitleText),
|
||||
GuideText = StripUnicodeControlCodes(_keyboardForegroundConfig.GuideText),
|
||||
SubmitText = (!string.IsNullOrWhiteSpace(_keyboardForegroundConfig.SubmitText) ?
|
||||
_keyboardForegroundConfig.SubmitText : "OK"),
|
||||
StringLengthMin = _keyboardForegroundConfig.StringLengthMin,
|
||||
|
@ -764,6 +763,41 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes all Unicode control code characters from the input string.
|
||||
/// This includes CR/LF, tabs, null characters, escape characters,
|
||||
/// and special control codes which are used for formatting by the real keyboard applet.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Some games send special control codes (such as 0x13 "Device Control 3") as part of the string.
|
||||
/// Future implementations of the emulated keyboard applet will need to handle these as well.
|
||||
/// </remarks>
|
||||
/// <param name="input">The input string to sanitize (may be null).</param>
|
||||
/// <returns>The sanitized string.</returns>
|
||||
internal static string StripUnicodeControlCodes(string input)
|
||||
{
|
||||
if (input is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (input.Length == 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder(capacity: input.Length);
|
||||
foreach (char c in input)
|
||||
{
|
||||
if (!char.IsControl(c))
|
||||
{
|
||||
sb.Append(c);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static T ReadStruct<T>(byte[] data)
|
||||
where T : struct
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue