diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index 4d6d9f9f3..1081b5897 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -1162,23 +1162,11 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeQuit)( JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePause)( JNIEnv *env, jclass cls) { - SDL_LockMutex(Android_ActivityMutex); - __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()"); - if (Android_Window) { - SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); - SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); - SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); - } - - /* *After* sending the relevant events, signal the pause semaphore - * so the event loop knows to pause and (optionally) block itself. - * Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's - * always increased. */ + /* Signal the pause semaphore so the event loop knows to pause and (optionally) block itself. + * Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's always increased. */ SDL_SemPost(Android_PauseSem); - - SDL_UnlockMutex(Android_ActivityMutex); } /* Resume */ diff --git a/src/video/android/SDL_androidevents.c b/src/video/android/SDL_androidevents.c index 87ad12fef..139eb3827 100644 --- a/src/video/android/SDL_androidevents.c +++ b/src/video/android/SDL_androidevents.c @@ -27,6 +27,7 @@ #include "SDL_androidkeyboard.h" #include "SDL_androidwindow.h" #include "../SDL_sysvideo.h" +#include "../../events/SDL_events_c.h" /* Can't include sysaudio "../../audio/android/SDL_androidaudio.h" * because of THIS redefinition */ @@ -129,6 +130,14 @@ Android_PumpEvents_Blocking(_THIS) } } else { if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) { + + /* Android_PauseSem was signaled */ + if (videodata->isPausing == 0) { + SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); + SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); + SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); + } + /* We've been signaled to pause (potentially several times), but before we block ourselves, * we need to make sure that the very last event (of the first pause sequence, if several) * has reached the app */ @@ -187,6 +196,14 @@ Android_PumpEvents_NonBlocking(_THIS) } } else { if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) { + + /* Android_PauseSem was signaled */ + if (videodata->isPausing == 0) { + SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); + SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); + SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); + } + /* We've been signaled to pause (potentially several times), but before we block ourselves, * we need to make sure that the very last event (of the first pause sequence, if several) * has reached the app */