We can't check for the screen keyboard in the event code because the video system isn't fully initialized yet.
authorSam Lantinga <slouken@libsdl.org>
Fri, 09 Nov 2012 02:18:27 -0800
changeset 6670 d4883f657288
parent 6669 c08febc180b9
child 6671 394e25751ef5
We can't check for the screen keyboard in the event code because the video system isn't fully initialized yet.
src/events/SDL_events.c
src/video/SDL_video.c
--- 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