Enable text input on video initialization without popping up an on-screen keyboard

Fixes https://github.com/libsdl-org/SDL/issues/8561

(cherry picked from commit 4ff3b28273a9b64892620435231539a1d2c98301)
This commit is contained in:
Sam Lantinga 2024-01-27 11:52:58 -08:00
parent ad1a11164c
commit 53058af284

View File

@ -435,6 +435,7 @@ int SDL_VideoInit(const char *driver_name)
SDL_bool init_keyboard = SDL_FALSE;
SDL_bool init_mouse = SDL_FALSE;
SDL_bool init_touch = SDL_FALSE;
const char *hint;
int i = 0;
/* Check to make sure we don't overwrite '_this' */
@ -562,16 +563,19 @@ int SDL_VideoInit(const char *driver_name)
SDL_DisableScreenSaver();
}
/* If we don't use a screen keyboard, turn on text input by default,
otherwise programs that expect to get text events without enabling
UNICODE input won't get any events.
Actually, come to think of it, you needed to call SDL_EnableUNICODE(1)
in SDL 1.2 before you got text input events. Hmm...
#if !defined(SDL_VIDEO_DRIVER_N3DS)
/* In the initial state we don't want to pop up an on-screen keyboard,
* but we do want to allow text input from other mechanisms.
*/
if (!SDL_HasScreenKeyboardSupport()) {
SDL_StartTextInput();
hint = SDL_GetHint(SDL_HINT_ENABLE_SCREEN_KEYBOARD);
if (!hint) {
SDL_SetHint(SDL_HINT_ENABLE_SCREEN_KEYBOARD, "0");
}
SDL_StartTextInput();
if (!hint) {
SDL_SetHint(SDL_HINT_ENABLE_SCREEN_KEYBOARD, NULL);
}
#endif /* !SDL_VIDEO_DRIVER_N3DS */
SDL_MousePostInit();