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