diff --git a/src/Magnum/Platform/Sdl2Application.cpp b/src/Magnum/Platform/Sdl2Application.cpp index 6e6ff6235..5dbbe15f5 100644 --- a/src/Magnum/Platform/Sdl2Application.cpp +++ b/src/Magnum/Platform/Sdl2Application.cpp @@ -395,7 +395,6 @@ void Sdl2Application::mainLoop() { break; } - #ifndef CORRADE_TARGET_EMSCRIPTEN case SDL_TEXTINPUT: { TextInputEvent e{{event.text.text, std::strlen(event.text.text)}}; textInputEvent(e); @@ -405,7 +404,6 @@ void Sdl2Application::mainLoop() { TextEditingEvent e{{event.edit.text, std::strlen(event.text.text)}, event.edit.start, event.edit.length}; textEditingEvent(e); } break; - #endif case SDL_QUIT: #ifndef CORRADE_TARGET_EMSCRIPTEN @@ -462,12 +460,32 @@ void Sdl2Application::setMouseLocked(bool enabled) { #endif } -#ifndef CORRADE_TARGET_EMSCRIPTEN +bool Sdl2Application::isTextInputActive() { + #ifndef CORRADE_TARGET_EMSCRIPTEN + return SDL_IsTextInputActive(); + #else + return _isTextInputActive; + #endif +} + +void Sdl2Application::startTextInput() { + SDL_StartTextInput(); + #ifdef CORRADE_TARGET_EMSCRIPTEN + _isTextInputActive = true; + #endif +} + +void Sdl2Application::stopTextInput() { + SDL_StopTextInput(); + #ifdef CORRADE_TARGET_EMSCRIPTEN + _isTextInputActive = false; + #endif +} + void Sdl2Application::setTextInputRect(const Range2Di& rect) { SDL_Rect r{rect.min().x(), rect.min().y(), rect.sizeX(), rect.sizeY()}; SDL_SetTextInputRect(&r); } -#endif void Sdl2Application::tickEvent() { /* If this got called, the tick event is not implemented by user and thus diff --git a/src/Magnum/Platform/Sdl2Application.h b/src/Magnum/Platform/Sdl2Application.h index 304a3bfce..e9be9a1d5 100644 --- a/src/Magnum/Platform/Sdl2Application.h +++ b/src/Magnum/Platform/Sdl2Application.h @@ -605,9 +605,12 @@ class Sdl2Application { * * If text input is active, text input events go to @ref textInputEvent() * and @ref textEditingEvent(). + * @note Note that in @ref CORRADE_TARGET_EMSCRIPTEN "Emscripten" the + * value is emulated and might not reflect external events like + * closing on-screen keyboard. * @see @ref startTextInput(), @ref stopTextInput() */ - bool isTextInputActive() { return SDL_IsTextInputActive(); } + bool isTextInputActive(); /** * @brief Start text input @@ -617,7 +620,7 @@ class Sdl2Application { * @see @ref stopTextInput(), @ref isTextInputActive(), * @ref setTextInputRect() */ - void startTextInput() { SDL_StartTextInput(); } + void startTextInput(); /** * @brief Stop text input @@ -625,7 +628,7 @@ class Sdl2Application { * @see @ref startTextInput(), @ref isTextInputActive(), @ref textInputEvent() * @ref textEditingEvent() */ - void stopTextInput() { SDL_StopTextInput(); } + void stopTextInput(); /** * @brief Set text input rectangle @@ -683,6 +686,7 @@ class Sdl2Application { UnsignedInt _minimalLoopPeriod; #else SDL_Surface* _glContext; + bool _isTextInputActive = false; #endif std::unique_ptr _context;