From 35a1f5fbe0ed558599af7080afe1a23447b277b4 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 1 Jan 2011 16:41:29 -0800 Subject: [PATCH] Fixed restoring the desktop resolution when toggling fullscreen mode --- src/video/cocoa/SDL_cocoamodes.m | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/video/cocoa/SDL_cocoamodes.m b/src/video/cocoa/SDL_cocoamodes.m index 2b6d09a08..be9a8bbc6 100644 --- a/src/video/cocoa/SDL_cocoamodes.m +++ b/src/video/cocoa/SDL_cocoamodes.m @@ -248,27 +248,29 @@ Cocoa_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) SDL_DisplayModeData *data = (SDL_DisplayModeData *) mode->driverdata; CGDisplayFadeReservationToken fade_token = kCGDisplayFadeReservationInvalidToken; CGError result; - + /* Fade to black to hide resolution-switching flicker */ if (CGAcquireDisplayFadeReservation(5, &fade_token) == kCGErrorSuccess) { CGDisplayFade(fade_token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE); } - /* Put up the blanking window (a window above all other windows) */ - result = CGDisplayCapture(displaydata->display); - if (result != kCGErrorSuccess) { - CG_SetError("CGDisplayCapture()", result); - goto ERR_NO_CAPTURE; - } - if (data == display->desktop_mode.driverdata) { /* Restoring desktop mode */ + CGDisplaySwitchToMode(displaydata->display, data->moderef); + CGDisplayRelease(displaydata->display); if (CGDisplayIsMain(displaydata->display)) { ShowMenuBar(); } } else { + /* Put up the blanking window (a window above all other windows) */ + result = CGDisplayCapture(displaydata->display); + if (result != kCGErrorSuccess) { + CG_SetError("CGDisplayCapture()", result); + goto ERR_NO_CAPTURE; + } + /* Do the physical switch */ result = CGDisplaySwitchToMode(displaydata->display, data->moderef); if (result != kCGErrorSuccess) { @@ -326,7 +328,6 @@ Cocoa_QuitModes(_THIS) Cocoa_SetDisplayMode(_this, display, &display->desktop_mode); } } - CGReleaseAllDisplays(); ShowMenuBar(); }