From b92e2f027aeb4e5abb0cb58c32b8ecdabcbadcda Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 19 Dec 2017 10:57:21 -0800 Subject: [PATCH] Fixed bug 4004 - iOS: don't hide keyboard on RETURN Dominik Reichardt As discussed in 2012 the iOS onscreen keyboard hides when you hit RETURN (see https://discourse.libsdl.org/t/on-screen-keyboard-change/19216). IMO this is a bad idea to not be able to influence this behavior and just recently this was fixed for Android by adding the hint SDL_HINT_ANDROID_RETURN_HIDES_IME in changeset 11768 6ce3bb5e38a5. --- .../app/src/main/java/org/libsdl/app/SDLActivity.java | 2 +- include/SDL_hints.h | 9 ++++----- src/video/uikit/SDL_uikitviewcontroller.m | 4 +++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index 1537240f0..0714b77da 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -1508,7 +1508,7 @@ class SDLInputConnection extends BaseInputConnection { */ if (event.getKeyCode() == 66) { - String imeHide = SDLActivity.nativeGetHint("SDL_ANDROID_RETURN_HIDES_IME"); + String imeHide = SDLActivity.nativeGetHint("SDL_RETURN_KEY_HIDES_IME"); if ((imeHide != null) && imeHide.equals("1")) { Context c = SDL.getContext(); if (c instanceof SDLActivity) { diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 0213daf6c..41212d7a7 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -721,17 +721,16 @@ extern "C" { #define SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH "SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH" /** - * \brief A variable to control whether the return key on the soft keyboard should hide the - * soft keyboard on Android. + * \brief A variable to control whether the return key on the soft keyboard + * should hide the soft keyboard on Android and iOS. * * The variable can be set to the following values: - * "0" - The return key will be handled as a key event. This is the behaviour of - * SDL <= 2.0.3. (default) + * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) * "1" - The return key will hide the keyboard. * * The value of this hint is used at runtime, so it can be changed at any time. */ -#define SDL_HINT_ANDROID_RETURN_HIDES_IME "SDL_ANDROID_RETURN_HIDES_IME" +#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" /** * \brief override the binding element for keyboard inputs for Emscripten builds diff --git a/src/video/uikit/SDL_uikitviewcontroller.m b/src/video/uikit/SDL_uikitviewcontroller.m index 745e2230b..bb2a5fb26 100644 --- a/src/video/uikit/SDL_uikitviewcontroller.m +++ b/src/video/uikit/SDL_uikitviewcontroller.m @@ -387,7 +387,9 @@ SDL_AppleTVControllerUIHintChanged(void *userdata, const char *name, const char { SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_RETURN); SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RETURN); - SDL_StopTextInput(); + if (SDL_GetHintBoolean(SDL_HINT_RETURN_KEY_HIDES_IME, SDL_FALSE)) { + SDL_StopTextInput(); + } return YES; }