Mercurial > sdl-ios-xcode
diff src/video/cocoa/SDL_cocoamodes.m @ 3505:a1bf34bc2a58
Ensure that the main display is picked up first
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 01 Dec 2009 10:41:58 +0000 |
parents | 919d88c202cf |
children | 58cbfa81317a |
line wrap: on
line diff
--- a/src/video/cocoa/SDL_cocoamodes.m Tue Dec 01 10:34:01 2009 +0000 +++ b/src/video/cocoa/SDL_cocoamodes.m Tue Dec 01 10:41:58 2009 +0000 @@ -139,7 +139,7 @@ CGDisplayErr result; CGDirectDisplayID *displays; CGDisplayCount numDisplays; - int i; + int pass, i; result = CGGetOnlineDisplayList(0, NULL, &numDisplays); if (result != kCGErrorSuccess) { @@ -154,35 +154,48 @@ return; } - for (i = 0; i < numDisplays; ++i) { - SDL_VideoDisplay display; - SDL_DisplayData *displaydata; - SDL_DisplayMode mode; - CFDictionaryRef moderef; + /* Pick up the primary display in the first pass, then get the rest */ + for (pass = 0; pass < 2; ++pass) { + for (i = 0; i < numDisplays; ++i) { + SDL_VideoDisplay display; + SDL_DisplayData *displaydata; + SDL_DisplayMode mode; + CFDictionaryRef moderef; - if (CGDisplayMirrorsDisplay(displays[i]) != kCGNullDirectDisplay) { - continue; - } - moderef = CGDisplayCurrentMode(displays[i]); - if (!moderef) { - continue; - } + if (pass == 0) { + if (!CGDisplayIsMain(displays[i])) { + continue; + } + } else { + if (CGDisplayIsMain(displays[i])) { + continue; + } + } - displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); - if (!displaydata) { - continue; - } - displaydata->display = displays[i]; + if (CGDisplayMirrorsDisplay(displays[i]) != kCGNullDirectDisplay) { + continue; + } + moderef = CGDisplayCurrentMode(displays[i]); + if (!moderef) { + continue; + } - SDL_zero(display); - if (!GetDisplayMode (moderef, &mode)) { - SDL_free(displaydata); - continue; + displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); + if (!displaydata) { + continue; + } + displaydata->display = displays[i]; + + SDL_zero(display); + if (!GetDisplayMode (moderef, &mode)) { + SDL_free(displaydata); + continue; + } + display.desktop_mode = mode; + display.current_mode = mode; + display.driverdata = displaydata; + SDL_AddVideoDisplay(&display); } - display.desktop_mode = mode; - display.current_mode = mode; - display.driverdata = displaydata; - SDL_AddVideoDisplay(&display); } SDL_stack_free(displays); }