summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--os/macosx/macos.m22
-rw-r--r--video/cocoa_v.m45
2 files changed, 65 insertions, 2 deletions
diff --git a/os/macosx/macos.m b/os/macosx/macos.m
index ee791166a..d61900bb1 100644
--- 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 =
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)
{