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 a3642acc6..1537240f0 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 @@ -1501,6 +1501,25 @@ class SDLInputConnection extends BaseInputConnection { * and so we need to generate them ourselves in commitText. To avoid duplicates on the handful of keys * that still do, we empty this out. */ + + /* + * Return DOES still generate a key event, however. So rather than using it as the 'click a button' key + * as we do with physical keyboards, let's just use it to hide the keyboard. + */ + + if (event.getKeyCode() == 66) { + String imeHide = SDLActivity.nativeGetHint("SDL_ANDROID_RETURN_HIDES_IME"); + if ((imeHide != null) && imeHide.equals("1")) { + Context c = SDL.getContext(); + if (c instanceof SDLActivity) { + SDLActivity activity = (SDLActivity)c; + activity.sendCommand(SDLActivity.COMMAND_TEXTEDIT_HIDE, null); + return true; + } + } + } + + return super.sendKeyEvent(event); } diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 7184b3dc7..0213daf6c 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -720,6 +720,19 @@ 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. + * + * 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) + * "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" + /** * \brief override the binding element for keyboard inputs for Emscripten builds *