# HG changeset patch # User truelight # Date 1136582864 0 # Node ID 12c9eda7edcd86bc927511978aefca4c6516a5d6 # Parent b1dbd94a5e2315bc2228554b52c67bac87a97587 (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil) diff -r b1dbd94a5e23 -r 12c9eda7edcd os/macosx/macos.m --- a/os/macosx/macos.m Fri Jan 06 21:10:58 2006 +0000 +++ b/os/macosx/macos.m Fri Jan 06 21:27:44 2006 +0000 @@ -8,11 +8,33 @@ * To insure that the crosscompiler still works, let him try any changes before they are committed */ + +#ifdef WITH_SDL + void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel ) { NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil); } +#elif defined WITH_COCOA + +void CocoaDialog ( const char *title, const char *message, const char *buttonLabel ); + +void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel ) +{ + CocoaDialog(title, message, buttonLabel); +} + + +#else + +void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel ) +{ + fprintf(stderr, "%s: %s\n", title, message); +} + +#endif + void ShowMacAssertDialog ( const char *function, const char *file, const int line, const char *expression ) { const char *buffer = diff -r b1dbd94a5e23 -r 12c9eda7edcd video/cocoa_v.m --- a/video/cocoa_v.m Fri Jan 06 21:10:58 2006 +0000 +++ b/video/cocoa_v.m Fri Jan 06 21:27:44 2006 +0000 @@ -175,7 +175,8 @@ uint32 palette32[256]; } _cocoa_video_data; - +static bool _cocoa_video_started = false; +static bool _cocoa_video_dialog = false; @@ -1872,7 +1873,7 @@ /* 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 @@ { 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 @@ 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 @@ }; + + +/* 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) {