[Scummvm-cvs-logs] CVS: scummvm/gui browser.cpp,1.19,1.20

Max Horn fingolfin at users.sourceforge.net
Wed Feb 11 05:36:03 CET 2004


Update of /cvsroot/scummvm/scummvm/gui
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15233

Modified Files:
	browser.cpp 
Log Message:
fix OSX nav dialog in fullscreen mode

Index: browser.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/gui/browser.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- browser.cpp	11 Feb 2004 08:16:08 -0000	1.19
+++ browser.cpp	11 Feb 2004 13:31:16 -0000	1.20
@@ -43,8 +43,44 @@
 	CFRelease(_titleRef);
 }
 
+static void myNavEventProc(NavEventCallbackMessage message, NavCBRecPtr callBackParms, void * callBackUD) {
+	switch (message) {
+	case kNavCBStart: {
+		// Force the window to be in the shielding window level -- this way 
+		// it's visible even in fullscreen mode.
+		// Some glitches remain:
+		// - Need to center the nav dialog over the game window
+		// - In fullscreen mode, the game window won't be redrawn while the nav
+		//   dialog is up, since our event loop won't run.
+		// - It will not work well if you try to use it in 320x200 fullscreen mode.
+		//   Not that I have found any machine which actually supports that :-).
+		WindowGroupRef group;
+		OSStatus err;
+		err = CreateWindowGroup(0, &group);
+		SetWindowGroupLevel(group, CGShieldingWindowLevel());
+		err = SetWindowGroup(callBackParms->window, group);
+		break; }
+	case kNavCBTerminate: {
+		WindowGroupRef group;
+		OSStatus err;
+		
+		group = GetWindowGroup(callBackParms->window);
+		err = ReleaseWindowGroup(group);
+		break; }
+	case kNavCBEvent: {
+		// TODO: here we could try to redraw the ScummVM window.
+		// This will probably require direct interfacing with the (SDL) backend
+		// and/or with Cocoa.
+		break; }
+	}
+	
+}
+
+static NavEventUPP myNavEventUPP = NewNavEventUPP((NavEventProcPtr)myNavEventProc);
+
 int BrowserDialog::runModal() {
 	NavDialogRef dialogRef;
+	WindowRef windowRef = 0;
 	NavDialogCreationOptions options;
 	NavUserAction result;
 	NavReplyRecord reply;
@@ -59,12 +95,14 @@
 	err = NavGetDefaultDialogCreationOptions(&options);
 	assert(err == noErr);
 	options.windowTitle = _titleRef;
-	options.message = CFSTR("Select your game directory");
+//	options.message = CFSTR("Select your game directory");
 	options.modality = kWindowModalityAppModal;
 	
-	err = NavCreateChooseFolderDialog(&options, 0, 0, 0, &dialogRef);
+	err = NavCreateChooseFolderDialog(&options, myNavEventUPP, 0, g_system, &dialogRef);
 	assert(err == noErr);
 	
+	windowRef = NavDialogGetWindow(dialogRef);
+	
 	err = NavDialogRun(dialogRef);
 	assert(err == noErr);
 





More information about the Scummvm-git-logs mailing list