mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-29 20:27:12 +01:00
f0a4fea89f
Dan Ginsburg I've seen this on several devices including Moto Z running Android 7 and a Snapdragon 845 running Android 9. What happens is as follows: SDLActivity.onWindowFocusChanged(true) happens pretty early on, but it's before we've done SDL_CreateWindow and so Android_Window is 0x0 thus this message does not get sent: JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeFocusChanged)( JNIEnv *env, jclass cls, jboolean hasFocus) { SDL_LockMutex(Android_ActivityMutex); if (Android_Window) { __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeFocusChanged()"); SDL_SendWindowEvent(Android_Window, (hasFocus ? SDL_WINDOWEVENT_FOCUS_GAINED : SDL_WINDOWEVENT_FOCUS_LOST), 0, 0); } SDL_UnlockMutex(Android_ActivityMutex); } When the window does get created, in Android_CreateWindow it does this: window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */ window->flags &= ~SDL_WINDOW_HIDDEN; window->flags |= SDL_WINDOW_SHOWN; /* only one window on Android */ window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ /* One window, it always has focus */ SDL_SetMouseFocus(window); SDL_SetKeyboardFocus(window); The SDL_SetKeyboardFocus does send an SDL_WINDOWEVENT_FOCUS_GAINED message, but it gets eaten in SDL_SendWindowEvent because we've forced SDL_WINDOW_INPUT_FOCUS beforehand: case SDL_WINDOWEVENT_FOCUS_GAINED: if (window->flags & SDL_WINDOW_INPUT_FOCUS) { return 0; } window->flags |= SDL_WINDOW_INPUT_FOCUS; SDL_OnWindowFocusGained(window); break; I can fix the problem if I comment out this line from Android_CreateWindow: window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ I would propose that as a fix unless there is a reason not to. |
||
---|---|---|
.. | ||
SDL_androidclipboard.c | ||
SDL_androidclipboard.h | ||
SDL_androidevents.c | ||
SDL_androidevents.h | ||
SDL_androidgl.c | ||
SDL_androidgl.h | ||
SDL_androidkeyboard.c | ||
SDL_androidkeyboard.h | ||
SDL_androidmessagebox.c | ||
SDL_androidmessagebox.h | ||
SDL_androidmouse.c | ||
SDL_androidmouse.h | ||
SDL_androidtouch.c | ||
SDL_androidtouch.h | ||
SDL_androidvideo.c | ||
SDL_androidvideo.h | ||
SDL_androidvulkan.c | ||
SDL_androidvulkan.h | ||
SDL_androidwindow.c | ||
SDL_androidwindow.h |