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)
 {