diff options
author | Max Horn | 2004-03-17 00:18:07 +0000 |
---|---|---|
committer | Max Horn | 2004-03-17 00:18:07 +0000 |
commit | 93ef5161a52f8a0dc6f36439c6441f97c4187cd8 (patch) | |
tree | 29f8091729e6872ab922b6ae0da50c5b2cb984f0 /gui | |
parent | 4a15a80eb3fad960e391d7de04edfae16a03f2ea (diff) | |
download | scummvm-rg350-93ef5161a52f8a0dc6f36439c6441f97c4187cd8.tar.gz scummvm-rg350-93ef5161a52f8a0dc6f36439c6441f97c4187cd8.tar.bz2 scummvm-rg350-93ef5161a52f8a0dc6f36439c6441f97c4187cd8.zip |
Fix (workaround?) for bugs #917700 and #917697
svn-id: r13323
Diffstat (limited to 'gui')
-rw-r--r-- | gui/browser.cpp | 46 |
1 files changed, 10 insertions, 36 deletions
diff --git a/gui/browser.cpp b/gui/browser.cpp index c713baa312..644e41aa90 100644 --- a/gui/browser.cpp +++ b/gui/browser.cpp @@ -43,41 +43,6 @@ BrowserDialog::~BrowserDialog() { 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; @@ -88,6 +53,11 @@ int BrowserDialog::runModal() { delete _choice; _choice = 0; + + // If in fullscreen mode, switch to windowed mode + bool wasFullscreen = g_system->getFeatureState(OSystem::kFeatureFullscreenMode); + if (wasFullscreen) + g_system->setFeatureState(OSystem::kFeatureFullscreenMode, false); // Temporarily show the real mouse ShowCursor(); @@ -98,7 +68,7 @@ int BrowserDialog::runModal() { // options.message = CFSTR("Select your game directory"); options.modality = kWindowModalityAppModal; - err = NavCreateChooseFolderDialog(&options, myNavEventUPP, 0, g_system, &dialogRef); + err = NavCreateChooseFolderDialog(&options, 0, 0, 0, &dialogRef); assert(err == noErr); windowRef = NavDialogGetWindow(dialogRef); @@ -136,6 +106,10 @@ int BrowserDialog::runModal() { NavDialogDispose(dialogRef); + // If we were in fullscreen mode, switch back + if (wasFullscreen) + g_system->setFeatureState(OSystem::kFeatureFullscreenMode, true); + return (_choice != 0); } |