Mercurial > hg > openttd
changeset 2827:b948ed221db9 draft
(svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
author | truelight <truelight@openttd.org> |
---|---|
date | Fri, 06 Jan 2006 21:27:44 +0000 |
parents | c50fd40c9d5b |
children | e12c87420dcd |
files | os/macosx/macos.m video/cocoa_v.m |
diffstat | 2 files changed, 65 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/os/macosx/macos.m +++ b/os/macosx/macos.m @@ -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 =
--- a/video/cocoa_v.m +++ b/video/cocoa_v.m @@ -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) {