From 53058af284d2da1d8299c997e6e556971b29d6d9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 27 Jan 2024 11:52:58 -0800 Subject: [PATCH] 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) --- src/video/SDL_video.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index c28c681cd..db5099dd9 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -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();