[PATCH] user32: Don't report mirrored slave monitors in EnumDisplayMonitors.
Zhiyi Zhang
zzhang at codeweavers.com
Thu Sep 12 08:39:24 CDT 2019
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>
---
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;
--
2.23.0
More information about the wine-devel
mailing list