|
|
@@ -784,11 +784,33 @@ void SDL_SendKeyboardText(const char *text)
|
|
|
event.type = SDL_EVENT_TEXT_INPUT;
|
|
|
event.common.timestamp = 0;
|
|
|
event.text.windowID = keyboard->focus ? keyboard->focus->id : 0;
|
|
|
- event.text.text = SDL_CreateTemporaryString(text);
|
|
|
- if (!event.text.text) {
|
|
|
- return;
|
|
|
+
|
|
|
+ if (SDL_GetHintBoolean("SDL2_COMPAT", false)) {
|
|
|
+ size_t pos = 0, advance, length = SDL_strlen(text);
|
|
|
+
|
|
|
+ // Limit SDL_EVENT_TEXT_INPUT events to 32 bytes for SDL2 compatibility
|
|
|
+ while (pos < length) {
|
|
|
+ char trimmed_text[32];
|
|
|
+
|
|
|
+ advance = SDL_utf8strlcpy(trimmed_text, text + pos, SDL_arraysize(trimmed_text));
|
|
|
+ if (!advance) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pos += advance;
|
|
|
+
|
|
|
+ event.text.text = SDL_CreateTemporaryString(trimmed_text);
|
|
|
+ if (!event.text.text) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ SDL_PushEvent(&event);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ event.text.text = SDL_CreateTemporaryString(text);
|
|
|
+ if (!event.text.text) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ SDL_PushEvent(&event);
|
|
|
}
|
|
|
- SDL_PushEvent(&event);
|
|
|
}
|
|
|
}
|
|
|
|