Add clipboard paste support to UIControl_TextInput and UIScene_Keyboard (#1298)

Resolved conflicts with existing fork paste implementation - adopted upstream's
batch sanitize-then-insert approach over char-by-char insertion.
This commit is contained in:
itsRevela
2026-03-23 11:57:59 -05:00
parent 33a3d69fc8
commit d446985f12
2 changed files with 33 additions and 13 deletions

View File

@@ -229,19 +229,29 @@ void UIScene_Keyboard::tick()
if (g_KBMInput.IsKeyPressed('V') && g_KBMInput.IsKeyDown(VK_CONTROL))
{
wstring pasted = Screen::getClipboard();
for (size_t i = 0; i < pasted.length(); i++)
wstring sanitized;
sanitized.reserve(pasted.length());
for (wchar_t pc : pasted)
{
if (pc >= 0x20) // Keep printable characters
{
if (static_cast<int>(m_win64TextBuffer.length() + sanitized.length()) >= m_win64MaxChars)
break;
sanitized += pc;
}
}
if (!sanitized.empty())
{
wchar_t pc = pasted[i];
if (pc < 0x20) continue; // skip control characters
if (static_cast<int>(m_win64TextBuffer.length()) >= m_win64MaxChars) break;
if (m_bPCMode)
{
m_win64TextBuffer.insert(m_iCursorPos, 1, pc);
m_iCursorPos++;
m_win64TextBuffer.insert(m_iCursorPos, sanitized);
m_iCursorPos += (int)sanitized.length();
}
else
{
m_win64TextBuffer += pc;
m_win64TextBuffer += sanitized;
}
changed = true;
}