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_keyboard = SDL_FALSE;
SDL_bool init_mouse = SDL_FALSE; SDL_bool init_mouse = SDL_FALSE;
SDL_bool init_touch = SDL_FALSE; SDL_bool init_touch = SDL_FALSE;
const char *hint;
int i = 0; int i = 0;
/* Check to make sure we don't overwrite '_this' */ /* Check to make sure we don't overwrite '_this' */
@ -562,16 +563,19 @@ int SDL_VideoInit(const char *driver_name)
SDL_DisableScreenSaver(); SDL_DisableScreenSaver();
} }
/* If we don't use a screen keyboard, turn on text input by default, #if !defined(SDL_VIDEO_DRIVER_N3DS)
otherwise programs that expect to get text events without enabling /* In the initial state we don't want to pop up an on-screen keyboard,
UNICODE input won't get any events. * but we do want to allow text input from other mechanisms.
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 (!SDL_HasScreenKeyboardSupport()) { hint = SDL_GetHint(SDL_HINT_ENABLE_SCREEN_KEYBOARD);
SDL_StartTextInput(); 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(); SDL_MousePostInit();