Ensure that the main display is picked up first

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404246
This commit is contained in:
Sam Lantinga 2009-12-01 10:41:58 +00:00
parent df27e595ca
commit eceb2d3dbe

View file

@ -139,7 +139,7 @@ Cocoa_InitModes(_THIS)
CGDisplayErr result; CGDisplayErr result;
CGDirectDisplayID *displays; CGDirectDisplayID *displays;
CGDisplayCount numDisplays; CGDisplayCount numDisplays;
int i; int pass, i;
result = CGGetOnlineDisplayList(0, NULL, &numDisplays); result = CGGetOnlineDisplayList(0, NULL, &numDisplays);
if (result != kCGErrorSuccess) { if (result != kCGErrorSuccess) {
@ -154,35 +154,48 @@ Cocoa_InitModes(_THIS)
return; return;
} }
for (i = 0; i < numDisplays; ++i) { /* Pick up the primary display in the first pass, then get the rest */
SDL_VideoDisplay display; for (pass = 0; pass < 2; ++pass) {
SDL_DisplayData *displaydata; for (i = 0; i < numDisplays; ++i) {
SDL_DisplayMode mode; SDL_VideoDisplay display;
CFDictionaryRef moderef; SDL_DisplayData *displaydata;
SDL_DisplayMode mode;
CFDictionaryRef moderef;
if (CGDisplayMirrorsDisplay(displays[i]) != kCGNullDirectDisplay) { if (pass == 0) {
continue; if (!CGDisplayIsMain(displays[i])) {
} continue;
moderef = CGDisplayCurrentMode(displays[i]); }
if (!moderef) { } else {
continue; if (CGDisplayIsMain(displays[i])) {
} continue;
}
}
displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); if (CGDisplayMirrorsDisplay(displays[i]) != kCGNullDirectDisplay) {
if (!displaydata) { continue;
continue; }
} moderef = CGDisplayCurrentMode(displays[i]);
displaydata->display = displays[i]; if (!moderef) {
continue;
}
SDL_zero(display); displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata));
if (!GetDisplayMode (moderef, &mode)) { if (!displaydata) {
SDL_free(displaydata); continue;
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); SDL_stack_free(displays);
} }