[Android] Fixes Bug 2041 - can't get SDL_QUIT event...

Thanks to Denis Bernard!

Also, changed the Android manifest so the app doesn't quit with orientation
changes, and made testgles.c exit properly on Android.
This commit is contained in:
Gabriel Jacobo 2013-11-06 11:23:24 -03:00
parent e27248c27e
commit 22770a8f40
5 changed files with 18 additions and 5 deletions

View File

@ -22,7 +22,9 @@
android:allowBackup="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:name="SDLActivity"
android:label="@string/app_name">
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

View File

@ -121,13 +121,13 @@ public class SDLActivity extends Activity {
SDLActivity.nativeQuit();
// Now wait for the SDL thread to quit
if (mSDLThread != null) {
if (SDLActivity.mSDLThread != null) {
try {
mSDLThread.join();
SDLActivity.mSDLThread.join();
} catch(Exception e) {
Log.v("SDL", "Problem stopping thread: " + e);
}
mSDLThread = null;
SDLActivity.mSDLThread = null;
//Log.v("SDL", "Finished waiting for SDL thread");
}

View File

@ -283,9 +283,16 @@ void Java_org_libsdl_app_SDLActivity_nativeLowMemory(
void Java_org_libsdl_app_SDLActivity_nativeQuit(
JNIEnv* env, jclass cls)
{
/* Discard previous events. The user should have handled state storage
* in SDL_APP_WILLENTERBACKGROUND. After nativeQuit() is called, no
* events other than SDL_QUIT and SDL_APP_TERMINATING should fire */
SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT);
/* Inject a SDL_QUIT event */
SDL_SendQuit();
SDL_SendAppEvent(SDL_APP_TERMINATING);
/* Resume the event loop so that the app can catch SDL_QUIT which
* should now be the top event in the event queue. */
if (!SDL_SemValue(Android_ResumeSem)) SDL_SemPost(Android_ResumeSem);
}
/* Pause */

View File

@ -82,7 +82,9 @@ Android_PumpEvents(_THIS)
isPaused = 0;
/* Restore the GL Context from here, as this operation is thread dependent */
android_egl_context_restore();
if (!SDL_HasEvent(SDL_QUIT)) {
android_egl_context_restore();
}
}
}
else {

View File

@ -335,7 +335,9 @@ main(int argc, char *argv[])
SDL_Log("%2.2f frames per second\n",
((double) frames * 1000) / (now - then));
}
#if !defined(__ANDROID__)
quit(0);
#endif
return 0;
}