Zhiyi Zhang : winemac.drv: Initialize new display device registry display settings.

Alexandre Julliard julliard at winehq.org
Tue Aug 18 16:34:23 CDT 2020


Module: wine
Branch: master
Commit: 580024c68474521ca624265dda4581ee0096075e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=580024c68474521ca624265dda4581ee0096075e

Author: Zhiyi Zhang <zzhang at 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 at codeweavers.com>
Signed-off-by: Ken Thomases <ken at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)
         {




More information about the wine-cvs mailing list