summaryrefslogtreecommitdiff
path: root/video
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2006-01-06 21:27:44 +0000
committertruelight <truelight@openttd.org>2006-01-06 21:27:44 +0000
commita1f83094538f72dd7c8a9eb9bc3b62e8cfa8402a (patch)
tree9ccb022eed5e1cc12417ed0bb1ef6aa65bab2576 /video
parent59bea21c2cdb300f78834f90bd8687c4146f7454 (diff)
downloadopenttd-a1f83094538f72dd7c8a9eb9bc3b62e8cfa8402a.tar.xz
(svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
Diffstat (limited to 'video')
-rw-r--r--video/cocoa_v.m45
1 files changed, 43 insertions, 2 deletions
diff --git a/video/cocoa_v.m b/video/cocoa_v.m
index dbd7c5e5e..6d4ec2bd7 100644
--- a/video/cocoa_v.m
+++ b/video/cocoa_v.m
@@ -175,7 +175,8 @@ static struct CocoaVideoData {
uint32 palette32[256];
} _cocoa_video_data;
-
+static bool _cocoa_video_started = false;
+static bool _cocoa_video_dialog = false;
@@ -1872,7 +1873,7 @@ void QZ_HideMouse (void) {
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
- /* Hand off to main application code */
+ /* Hand off to main application code */
QZ_GameLoop();
/* We're done, thank you for playing */
@@ -2007,10 +2008,15 @@ static void CocoaVideoStop(void)
{
DEBUG(driver, 1)("cocoa_v: CocoaVideoStop");
+ if(!_cocoa_video_started)
+ return;
+
if(_cocoa_video_data.isset)
QZ_UnsetVideoMode();
[_ottd_main release];
+
+ _cocoa_video_started = false;
}
static const char *CocoaVideoStart(const char * const *parm)
@@ -2019,8 +2025,18 @@ static const char *CocoaVideoStart(const char * const *parm)
DEBUG(driver, 1)("cocoa_v: CocoaVideoStart");
+ if(_cocoa_video_started)
+ return "Already started";
+ _cocoa_video_started = true;
+
+ memset(&_cocoa_video_data, 0, sizeof(_cocoa_video_data));
+
setupApplication();
+ /* Don't create a window or enter fullscreen if we're just going to show a dialog. */
+ if(_cocoa_video_dialog)
+ return NULL;
+
QZ_VideoInit();
ret = QZ_SetVideoMode(_cur_resolution[0], _cur_resolution[1], _fullscreen);
@@ -2086,6 +2102,31 @@ const HalVideoDriver _cocoa_video_driver = {
};
+
+
+/* This is needed since sometimes assert is called before the videodriver is initialized */
+void CocoaDialog ( const char *title, const char *message, const char *buttonLabel )
+{
+ bool wasstarted;
+
+ _cocoa_video_dialog = true;
+
+ wasstarted = _cocoa_video_started;
+ if(!_cocoa_video_started && CocoaVideoStart(NULL) != NULL) {
+ fprintf(stderr, "%s: %s\n", title, message);
+ return;
+ }
+
+
+ NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil);
+
+ if(!wasstarted)
+ CocoaVideoStop();
+
+ _cocoa_video_dialog = false;
+}
+
+
/* This is needed since OS X applications are started with the working dir set to / when double-clicked */
void cocoaSetWorkingDirectory(void)
{