comparison src/video/cocoa/SDL_cocoamodes.m @ 4939:de89a6f73c06

Fixed restoring the desktop resolution when toggling fullscreen mode
author Sam Lantinga <slouken@libsdl.org>
date Sat, 01 Jan 2011 16:41:29 -0800
parents 514f811a4887
children be02be2ea897
comparison
equal deleted inserted replaced
4938:2af0032520d8 4939:de89a6f73c06
246 { 246 {
247 SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata; 247 SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata;
248 SDL_DisplayModeData *data = (SDL_DisplayModeData *) mode->driverdata; 248 SDL_DisplayModeData *data = (SDL_DisplayModeData *) mode->driverdata;
249 CGDisplayFadeReservationToken fade_token = kCGDisplayFadeReservationInvalidToken; 249 CGDisplayFadeReservationToken fade_token = kCGDisplayFadeReservationInvalidToken;
250 CGError result; 250 CGError result;
251 251
252 /* Fade to black to hide resolution-switching flicker */ 252 /* Fade to black to hide resolution-switching flicker */
253 if (CGAcquireDisplayFadeReservation(5, &fade_token) == kCGErrorSuccess) { 253 if (CGAcquireDisplayFadeReservation(5, &fade_token) == kCGErrorSuccess) {
254 CGDisplayFade(fade_token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE); 254 CGDisplayFade(fade_token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE);
255 } 255 }
256 256
257 /* Put up the blanking window (a window above all other windows) */
258 result = CGDisplayCapture(displaydata->display);
259 if (result != kCGErrorSuccess) {
260 CG_SetError("CGDisplayCapture()", result);
261 goto ERR_NO_CAPTURE;
262 }
263
264 if (data == display->desktop_mode.driverdata) { 257 if (data == display->desktop_mode.driverdata) {
265 /* Restoring desktop mode */ 258 /* Restoring desktop mode */
259 CGDisplaySwitchToMode(displaydata->display, data->moderef);
260
266 CGDisplayRelease(displaydata->display); 261 CGDisplayRelease(displaydata->display);
267 262
268 if (CGDisplayIsMain(displaydata->display)) { 263 if (CGDisplayIsMain(displaydata->display)) {
269 ShowMenuBar(); 264 ShowMenuBar();
270 } 265 }
271 } else { 266 } else {
267 /* Put up the blanking window (a window above all other windows) */
268 result = CGDisplayCapture(displaydata->display);
269 if (result != kCGErrorSuccess) {
270 CG_SetError("CGDisplayCapture()", result);
271 goto ERR_NO_CAPTURE;
272 }
273
272 /* Do the physical switch */ 274 /* Do the physical switch */
273 result = CGDisplaySwitchToMode(displaydata->display, data->moderef); 275 result = CGDisplaySwitchToMode(displaydata->display, data->moderef);
274 if (result != kCGErrorSuccess) { 276 if (result != kCGErrorSuccess) {
275 CG_SetError("CGDisplaySwitchToMode()", result); 277 CG_SetError("CGDisplaySwitchToMode()", result);
276 goto ERR_NO_SWITCH; 278 goto ERR_NO_SWITCH;
324 326
325 if (display->current_mode.driverdata != display->desktop_mode.driverdata) { 327 if (display->current_mode.driverdata != display->desktop_mode.driverdata) {
326 Cocoa_SetDisplayMode(_this, display, &display->desktop_mode); 328 Cocoa_SetDisplayMode(_this, display, &display->desktop_mode);
327 } 329 }
328 } 330 }
329 CGReleaseAllDisplays();
330 ShowMenuBar(); 331 ShowMenuBar();
331 } 332 }
332 333
333 /* vi: set ts=4 sw=4 expandtab: */ 334 /* vi: set ts=4 sw=4 expandtab: */