From 2e801b1ae786326ace0b38293824b90925f0f413 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Fri, 4 Mar 2022 10:49:12 -0800
Subject: [PATCH] Split long text input into multiple events if needed (thanks
@zreedy!)
---
src/events/SDL_keyboard.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/events/SDL_keyboard.c b/src/events/SDL_keyboard.c
index 3400ca0c5dd..bc2386b44c0 100644
--- a/src/events/SDL_keyboard.c
+++ b/src/events/SDL_keyboard.c
@@ -867,10 +867,14 @@ SDL_SendKeyboardText(const char *text)
posted = 0;
if (SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE) {
SDL_Event event;
+ size_t i = 0, length = SDL_strlen(text);
+
event.text.type = SDL_TEXTINPUT;
event.text.windowID = keyboard->focus ? keyboard->focus->id : 0;
- SDL_utf8strlcpy(event.text.text, text, SDL_arraysize(event.text.text));
- posted = (SDL_PushEvent(&event) > 0);
+ while (i < length) {
+ i += SDL_utf8strlcpy(event.text.text, text + i, SDL_arraysize(event.text.text));
+ posted |= (SDL_PushEvent(&event) > 0);
+ }
}
return (posted);
}