From 08817ddd3c4a2f263c791459e1d56f916de5884f Mon Sep 17 00:00:00 2001 From: DavidLudwig Date: Mon, 23 Jul 2012 00:14:07 -0400 Subject: [PATCH] Fix for Game Center leaderboard screens not always responding to touch input in iOS apps that don't use SDL_iPhoneSetAnimationCallback --- src/video/uikit/SDL_uikitevents.m | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/video/uikit/SDL_uikitevents.m b/src/video/uikit/SDL_uikitevents.m index ff08e1533..e7f0dcc63 100755 --- a/src/video/uikit/SDL_uikitevents.m +++ b/src/video/uikit/SDL_uikitevents.m @@ -57,14 +57,24 @@ So what we do is that in the UIApplicationDelegate class (SDLUIApplicationDelega */ if (setjmp(*jump_env()) == 0) { /* if we're setting the jump, rather than jumping back */ + + /* Let the run loop run for a short amount of time: long enough for + touch events to get processed (which is important to get certain + elements of Game Center's GKLeaderboardViewController to respond + to touch input), but not long enough to introduce a significant + delay in the rest of the app. + */ + const CFTimeInterval seconds = 0.000002; + + /* Pump most event types. */ SInt32 result; do { - result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE); + result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, seconds, TRUE); } while (result == kCFRunLoopRunHandledSource); /* Make sure UIScrollView objects scroll properly. */ do { - result = CFRunLoopRunInMode((CFStringRef)UITrackingRunLoopMode, 0, TRUE); + result = CFRunLoopRunInMode((CFStringRef)UITrackingRunLoopMode, seconds, TRUE); } while(result == kCFRunLoopRunHandledSource); } }