Module: wine Branch: master Commit: 580024c68474521ca624265dda4581ee0096075e URL: https://source.winehq.org/git/wine.git/?a=commit;h=580024c68474521ca624265dd...
Author: Zhiyi Zhang zzhang@codeweavers.com Date: Mon Aug 17 16:36:41 2020 +0800
winemac.drv: Initialize new display device registry display settings.
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com Signed-off-by: Ken Thomases ken@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/winemac.drv/display.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+)
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 9a80308e89..a96a7b2c5f 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -1362,6 +1362,41 @@ done: return (err == kCGErrorSuccess); }
+/*********************************************************************** + * init_registry_display_settings + * + * Initialize registry display settings when new display devices are added. + */ +static void init_registry_display_settings(void) +{ + DEVMODEW dm = {.dmSize = sizeof(dm)}; + DISPLAY_DEVICEW dd = {sizeof(dd)}; + DWORD i = 0; + LONG ret; + + while (EnumDisplayDevicesW(NULL, i++, &dd, 0)) + { + /* Skip if the device already has registry display settings */ + if (EnumDisplaySettingsExW(dd.DeviceName, ENUM_REGISTRY_SETTINGS, &dm, 0)) + continue; + + if (!EnumDisplaySettingsExW(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm, 0)) + { + ERR("Failed to query current display settings for %s.\n", wine_dbgstr_w(dd.DeviceName)); + continue; + } + + TRACE("Device %s current display mode %ux%u %ubits %uHz at %d,%d.\n", + wine_dbgstr_w(dd.DeviceName), dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, + dm.dmDisplayFrequency, dm.dmPosition.x, dm.dmPosition.y); + + ret = ChangeDisplaySettingsExW(dd.DeviceName, &dm, NULL, + CDS_GLOBAL | CDS_NORESET | CDS_UPDATEREGISTRY, NULL); + if (ret != DISP_CHANGE_SUCCESSFUL) + ERR("Failed to save registry display settings for %s, returned %d.\n", + wine_dbgstr_w(dd.DeviceName), ret); + } +}
/*********************************************************************** * macdrv_displays_changed @@ -1392,6 +1427,7 @@ void macdrv_displays_changed(const macdrv_event *event) CGDisplayModeRelease(mode);
macdrv_init_display_devices(TRUE); + init_registry_display_settings();
if (is_original && retina_enabled) {