From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winemac.drv/display.c | 59 ++++++++++---------------------------- 1 file changed, 15 insertions(+), 44 deletions(-)
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index e8d26dfd241..f298889994f 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -685,24 +685,6 @@ void check_retina_status(void) } }
-static BOOL get_primary_adapter(WCHAR *name) -{ - DISPLAY_DEVICEW dd; - DWORD i; - - dd.cb = sizeof(dd); - for (i = 0; !NtUserEnumDisplayDevices(NULL, i, &dd, 0); ++i) - { - if (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) - { - lstrcpyW(name, dd.DeviceName); - return TRUE; - } - } - - return FALSE; -} - static BOOL is_detached_mode(const DEVMODEW *mode) { return mode->dmFields & DM_POSITION && @@ -771,12 +753,10 @@ static CGDisplayModeRef find_best_display_mode(DEVMODEW *devmode, CFArrayRef dis */ LONG macdrv_ChangeDisplaySettings(LPDEVMODEW displays, HWND hwnd, DWORD flags, LPVOID lpvoid) { - WCHAR primary_adapter[CCHDEVICENAME]; LONG ret = DISP_CHANGE_SUCCESSFUL; DEVMODEW *mode; - int bpp; struct macdrv_display *macdrv_displays; - int num_displays; + int i, bpp, num_displays; CFArrayRef display_modes; struct display_mode_descriptor *desc; CGDisplayModeRef best_display_mode; @@ -785,36 +765,26 @@ LONG macdrv_ChangeDisplaySettings(LPDEVMODEW displays, HWND hwnd, DWORD flags, L
init_original_display_mode();
- if (!get_primary_adapter(primary_adapter)) - return DISP_CHANGE_FAILED; - if (macdrv_get_displays(&macdrv_displays, &num_displays)) return DISP_CHANGE_FAILED;
- display_modes = copy_display_modes(macdrv_displays[0].displayID, FALSE); - if (!display_modes) - { - macdrv_free_displays(macdrv_displays); - return DISP_CHANGE_FAILED; - } - bpp = get_default_bpp();
- desc = create_original_display_mode_descriptor(macdrv_displays[0].displayID); - - for (mode = displays; mode->dmSize && !ret; mode = NEXT_DEVMODEW(mode)) + for (mode = displays, i = 0; mode->dmSize && !ret && i <= num_displays; mode = NEXT_DEVMODEW(mode), i++) { - if (wcsicmp(primary_adapter, mode->dmDeviceName)) - { - FIXME("Changing non-primary adapter settings is currently unsupported.\n"); - continue; - } if (is_detached_mode(mode)) { FIXME("Detaching adapters is currently unsupported.\n"); continue; }
+ if (!(display_modes = copy_display_modes(macdrv_displays[i].displayID, FALSE))) + { + ret = DISP_CHANGE_FAILED; + break; + } + desc = create_original_display_mode_descriptor(macdrv_displays[i].displayID); + if (mode->dmBitsPerPel != bpp) TRACE("using default %d bpp instead of caller's request %d bpp\n", bpp, mode->dmBitsPerPel);
@@ -830,19 +800,20 @@ LONG macdrv_ChangeDisplaySettings(LPDEVMODEW displays, HWND hwnd, DWORD flags, L bpp, mode->dmDisplayFrequency); ret = DISP_CHANGE_BADMODE; } - else if (macdrv_set_display_mode(&macdrv_displays[0], best_display_mode)) - macdrv_init_display_devices(TRUE); - else + else if (!macdrv_set_display_mode(&macdrv_displays[i], best_display_mode)) { WARN("Failed to set display mode\n"); ret = DISP_CHANGE_FAILED; } + + free_display_mode_descriptor(desc); + CFRelease(display_modes); }
- free_display_mode_descriptor(desc); - CFRelease(display_modes); macdrv_free_displays(macdrv_displays);
+ if (!ret) + macdrv_init_display_devices(TRUE); return ret; }