From 0f014f5030ed667d919b91b8de0402810dd07787 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Bernon?= Date: Mon, 29 Aug 2022 10:19:23 +0200 Subject: [PATCH] winemac.drv: Support getting non-primary adapter current display mode. --- dlls/winemac.drv/display.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 46246754005..206f91504de 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -1143,8 +1143,10 @@ failed: BOOL macdrv_GetCurrentDisplaySettings(LPCWSTR devname, LPDEVMODEW devmode) { struct macdrv_display *displays = NULL; - int num_displays; + int num_displays, display_idx; CGDisplayModeRef display_mode; + CGDirectDisplayID display_id; + WCHAR *end; TRACE("%s, %p + %hu\n", debugstr_w(devname), devmode, devmode->dmSize); @@ -1153,17 +1155,24 @@ BOOL macdrv_GetCurrentDisplaySettings(LPCWSTR devname, LPDEVMODEW devmode) if (macdrv_get_displays(&displays, &num_displays)) return FALSE; - display_mode = CGDisplayCopyDisplayMode(displays[0].displayID); + display_idx = wcstol(devname + 11, &end, 10) - 1; + if (display_idx >= num_displays) + { + macdrv_free_displays(displays); + return FALSE; + } + + display_id = displays[display_idx].displayID; + display_mode = CGDisplayCopyDisplayMode(display_id); - /* 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 = CGRectGetMinX(displays[display_idx].frame); + devmode->dmPosition.y = CGRectGetMinY(displays[display_idx].frame); devmode->dmFields |= DM_POSITION; - display_mode_to_devmode(displays[0].displayID, display_mode, devmode); + display_mode_to_devmode(display_id, display_mode, devmode); if (retina_enabled) { - struct display_mode_descriptor *desc = create_original_display_mode_descriptor(displays[0].displayID); + struct display_mode_descriptor *desc = create_original_display_mode_descriptor(display_id); if (display_mode_matches_descriptor(display_mode, desc)) { devmode->dmPelsWidth *= 2; @@ -1175,7 +1184,8 @@ BOOL macdrv_GetCurrentDisplaySettings(LPCWSTR devname, LPDEVMODEW devmode) CFRelease(display_mode); macdrv_free_displays(displays); - TRACE("current mode -- %dx%dx%dbpp @%d Hz", + TRACE("current mode -- %dx%d-%dx%dx%dbpp @%d Hz", + devmode->dmPosition.x, devmode->dmPosition.y, devmode->dmPelsWidth, devmode->dmPelsHeight, devmode->dmBitsPerPel, devmode->dmDisplayFrequency); if (devmode->dmDisplayOrientation) -- 2.11.4.GIT