We can't check for the screen keyboard in the event code because the video system isn't fully initialized yet.
--- a/src/events/SDL_events.c Thu Nov 08 21:53:57 2012 -0800
+++ b/src/events/SDL_events.c Fri Nov 09 02:18:27 2012 -0800
@@ -125,14 +125,10 @@
/* No filter to start with, process most event types */
SDL_EventOK = NULL;
+ SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE);
+ SDL_EventState(SDL_TEXTEDITING, SDL_DISABLE);
SDL_EventState(SDL_SYSWMEVENT, SDL_DISABLE);
- /* If text input shows UI onscreen we want to start with it disabled */
- if (SDL_HasScreenKeyboardSupport()) {
- SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE);
- SDL_EventState(SDL_TEXTEDITING, SDL_DISABLE);
- }
-
/* Create the lock and set ourselves active */
#if !SDL_THREADS_DISABLED
if (!SDL_EventQ.lock) {
--- a/src/video/SDL_video.c Thu Nov 08 21:53:57 2012 -0800
+++ b/src/video/SDL_video.c Fri Nov 09 02:18:27 2012 -0800
@@ -522,6 +522,17 @@
_this->DestroyWindowFramebuffer = SDL_DestroyWindowTexture;
}
+ /* 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 (!SDL_HasScreenKeyboardSupport()) {
+ SDL_StartTextInput();
+ }
+
/* We're ready to go! */
return 0;
}
@@ -2831,7 +2842,12 @@
if (_this && _this->SDL_HasScreenKeyboardSupport) {
return _this->SDL_HasScreenKeyboardSupport(_this);
}
+/* FIXME: The event system queries this before we initialize our video driver */
+#if __IPHONEOS__ || __ANDROID__
+ return SDL_TRUE;
+#else
return SDL_FALSE;
+#endif
}
SDL_bool