Zhiyi Zhang : user32: Don't report mirrored slave monitors in EnumDisplayMonitors.

Alexandre Julliard julliard at winehq.org
Mon Sep 16 16:33:43 CDT 2019


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

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Thu Sep 12 21:39:24 2019 +0800

user32: Don't report mirrored slave monitors in EnumDisplayMonitors.

Mirrored slave monitors don't get enumerated by EnumDisplayMonitors.
For example, if two monitors are in mirrored mode, only one of them
is reported by EnumDisplayMonitors.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/sysparams.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 09cebc2f62..b407b51811 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -3750,7 +3750,8 @@ static BOOL update_monitor_cache(void)
     HANDLE mutex = NULL;
     DWORD state_flags;
     BOOL ret = FALSE;
-    DWORD i = 0;
+    BOOL mirrored_slave;
+    DWORD i = 0, j;
     DWORD type;
 
     /* Update monitor cache from SetupAPI if it's outdated */
@@ -3794,6 +3795,20 @@ static BOOL update_monitor_cache(void)
         if (!SetupDiGetDevicePropertyW( devinfo, &device_data, &WINE_DEVPROPKEY_MONITOR_RCMONITOR, &type,
                                         (BYTE *)&monitors[monitor_count].rcMonitor, sizeof(RECT), NULL, 0 ))
             goto fail;
+
+        /* Mirrored slave monitors also don't get enumerated */
+        mirrored_slave = FALSE;
+        for (j = 0; j < monitor_count; j++)
+        {
+            if (EqualRect(&monitors[j].rcMonitor, &monitors[monitor_count].rcMonitor))
+            {
+                mirrored_slave = TRUE;
+                break;
+            }
+        }
+        if (mirrored_slave)
+            continue;
+
         if (!SetupDiGetDevicePropertyW( devinfo, &device_data, &WINE_DEVPROPKEY_MONITOR_RCWORK, &type,
                                         (BYTE *)&monitors[monitor_count].rcWork, sizeof(RECT), NULL, 0 ))
             goto fail;




More information about the wine-cvs mailing list