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@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2019-09-12 21:39:24 +08:00 committed by Alexandre Julliard
parent 359eb9e557
commit ca39b1c22d
1 changed files with 16 additions and 1 deletions

View File

@ -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;