Don't run the game loop while a messagebox is up

This commit is contained in:
Sam Lantinga 2012-11-25 10:03:22 -08:00
parent 4b042442c8
commit 7694b94cfc
3 changed files with 20 additions and 4 deletions

View file

@ -22,6 +22,8 @@
#if SDL_VIDEO_DRIVER_UIKIT
extern SDL_bool UIKit_ShowingMessageBox();
extern int UIKit_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid);
#endif /* SDL_VIDEO_DRIVER_UIKIT */

View file

@ -28,6 +28,7 @@
/* Display a UIKit message box */
static SDL_bool s_showingMessageBox = SDL_FALSE;
@interface UIKit_UIAlertViewDelegate : NSObject <UIAlertViewDelegate> {
@private
@ -60,6 +61,12 @@
@end // UIKit_UIAlertViewDelegate
SDL_bool
UIKit_ShowingMessageBox()
{
return s_showingMessageBox;
}
int
UIKit_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
{
@ -86,9 +93,12 @@ UIKit_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
// Run the main event loop until the alert has finished
// Note that this needs to be done on the main thread
s_showingMessageBox = SDL_TRUE;
while (clicked == messageboxdata->numbuttons) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
s_showingMessageBox = SDL_FALSE;
*buttonid = messageboxdata->buttons[clicked].buttonid;
[pool release];

View file

@ -22,9 +22,10 @@
#if SDL_VIDEO_DRIVER_UIKIT
#import <QuartzCore/QuartzCore.h>
#import <OpenGLES/EAGLDrawable.h>
#import "SDL_uikitopenglview.h"
#include <QuartzCore/QuartzCore.h>
#include <OpenGLES/EAGLDrawable.h>
#include "SDL_uikitopenglview.h"
#include "SDL_uikitmessagebox.h"
@implementation SDL_uikitopenglview
@ -180,7 +181,10 @@
- (void)doLoop:(id)sender
{
animationCallback(animationCallbackParam);
// Don't run the game loop while a messagebox is up
if (!UIKit_ShowingMessageBox()) {
animationCallback(animationCallbackParam);
}
}
- (void)setCurrentContext