From: Ken Thomases Subject: [PATCH 2/6] winemac: Make EnumDisplaySettingsEx() query the display named by the devname parameter. Message-Id: <066EBDCA-7877-4399-B696-AC25EC286B08@codeweavers.com> Date: Thu, 27 Mar 2014 18:18:31 -0500 It used to ignore devname and always query the primary display. --- dlls/winemac.drv/display.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 5ce419a..6c79299 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -515,6 +515,7 @@ BOOL CDECL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, { 'W','i','n','e',' ','M','a','c',' ','d','r','i','v','e','r',0 }; struct macdrv_display *displays = NULL; int num_displays; + int display_index; CGDisplayModeRef display_mode; int display_mode_bpp; BOOL synthesized = FALSE; @@ -539,10 +540,23 @@ BOOL CDECL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, if (macdrv_get_displays(&displays, &num_displays)) goto failed; + for (display_index = 0; devname && devname[0] && display_index < num_displays; display_index++) + { + if (is_display_device_name(devname, display_index + 1)) + break; + } + if (display_index >= num_displays) + { + TRACE("no device named %s\n", debugstr_w(devname)); + macdrv_free_displays(displays); + SetLastError(ERROR_DEV_NOT_EXIST); + return FALSE; + } + if (mode == ENUM_CURRENT_SETTINGS) { TRACE("mode %d (current) -- getting current mode\n", mode); - display_mode = CGDisplayCopyDisplayMode(displays[0].displayID); + display_mode = CGDisplayCopyDisplayMode(displays[display_index].displayID); display_mode_bpp = display_mode_bits_per_pixel(display_mode); } else @@ -554,7 +568,7 @@ BOOL CDECL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, if (mode == 0 || !modes) { if (modes) CFRelease(modes); - modes = CGDisplayCopyAllDisplayModes(displays[0].displayID, NULL); + modes = CGDisplayCopyAllDisplayModes(displays[display_index].displayID, NULL); modes_has_8bpp = modes_has_16bpp = FALSE; if (modes) @@ -632,12 +646,11 @@ BOOL CDECL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, if (!display_mode) goto failed; - /* We currently only report modes for the primary display, so it's at (0, 0). */ - devmode->dmPosition.x = 0; - devmode->dmPosition.y = 0; + devmode->dmPosition.x = displays[display_index].frame.origin.x; + devmode->dmPosition.y = displays[display_index].frame.origin.y; devmode->dmFields |= DM_POSITION; - rotation = CGDisplayRotation(displays[0].displayID); + rotation = CGDisplayRotation(displays[display_index].displayID); devmode->dmDisplayOrientation = ((int)((rotation / 90) + 0.5)) % 4; devmode->dmFields |= DM_DISPLAYORIENTATION;