Skip to content

Commit

Permalink
Added the hint SDL_HINT_ENABLE_SCREEN_KEYBOARD to control whether the…
Browse files Browse the repository at this point in the history
… on-screen keyboard should be shown when text input is active

Fixes #7160
  • Loading branch information
slouken committed May 20, 2023
1 parent f005106 commit a6a2220
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
11 changes: 11 additions & 0 deletions include/SDL3/SDL_hints.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,17 @@ extern "C" {
*/
#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"

/**
* \brief A variable that controls whether the on-screen keyboard should be shown when text input is active
*
* The variable can be set to the following values:
* "0" - Do not show the on-screen keyboard
* "1" - Show the on-screen keyboard
*
* The default value is "1". This hint must be set before text input is activated.
*/
#define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD"

/**
* \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs
*
Expand Down
16 changes: 10 additions & 6 deletions src/video/SDL_video.c
Original file line number Diff line number Diff line change
Expand Up @@ -4665,9 +4665,11 @@ void SDL_StartTextInput(void)
SDL_SetEventEnabled(SDL_EVENT_TEXT_EDITING, SDL_TRUE);

/* Then show the on-screen keyboard, if any */
window = SDL_GetFocusWindow();
if (window && _this && _this->ShowScreenKeyboard) {
_this->ShowScreenKeyboard(_this, window);
if (SDL_GetHintBoolean(SDL_HINT_ENABLE_SCREEN_KEYBOARD, SDL_TRUE)) {
window = SDL_GetFocusWindow();
if (window && _this && _this->ShowScreenKeyboard) {
_this->ShowScreenKeyboard(_this, window);
}
}

/* Finally start the text input system */
Expand Down Expand Up @@ -4707,9 +4709,11 @@ void SDL_StopTextInput(void)
}

/* Hide the on-screen keyboard, if any */
window = SDL_GetFocusWindow();
if (window && _this && _this->HideScreenKeyboard) {
_this->HideScreenKeyboard(_this, window);
if (SDL_GetHintBoolean(SDL_HINT_ENABLE_SCREEN_KEYBOARD, SDL_TRUE)) {
window = SDL_GetFocusWindow();
if (window && _this && _this->HideScreenKeyboard) {
_this->HideScreenKeyboard(_this, window);
}
}

/* Finally disable text events */
Expand Down

0 comments on commit a6a2220

Please sign in to comment.