user32: Report a fake monitor when running on an invisible window station.
The visible window station check was accidentally deleted in 95be042
.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51590
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
7341bee1dc
commit
f8ce819ab5
|
@ -4111,12 +4111,20 @@ static BOOL CALLBACK enum_mon_callback( HMONITOR monitor, HDC hdc, LPRECT rect,
|
||||||
|
|
||||||
BOOL CDECL nulldrv_EnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC proc, LPARAM lp )
|
BOOL CDECL nulldrv_EnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC proc, LPARAM lp )
|
||||||
{
|
{
|
||||||
|
BOOL is_winstation_visible = FALSE;
|
||||||
|
USEROBJECTFLAGS flags;
|
||||||
|
HWINSTA winstation;
|
||||||
RECT monitor_rect;
|
RECT monitor_rect;
|
||||||
DWORD i = 0;
|
DWORD i = 0;
|
||||||
|
|
||||||
TRACE("(%p, %p, %p, 0x%lx)\n", hdc, rect, proc, lp);
|
TRACE("(%p, %p, %p, 0x%lx)\n", hdc, rect, proc, lp);
|
||||||
|
|
||||||
if (update_monitor_cache())
|
/* Report physical monitor information only if window station has visible display surfaces */
|
||||||
|
winstation = GetProcessWindowStation();
|
||||||
|
if (GetUserObjectInformationW( winstation, UOI_FLAGS, &flags, sizeof(flags), NULL ))
|
||||||
|
is_winstation_visible = flags.dwFlags & WSF_VISIBLE;
|
||||||
|
|
||||||
|
if (is_winstation_visible && update_monitor_cache())
|
||||||
{
|
{
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1563,6 +1563,7 @@ static void test_EnumDisplayMonitors(void)
|
||||||
static const DWORD DESKTOP_ALL_ACCESS = 0x01ff;
|
static const DWORD DESKTOP_ALL_ACCESS = 0x01ff;
|
||||||
HWINSTA winstation, old_winstation;
|
HWINSTA winstation, old_winstation;
|
||||||
HDESK desktop, old_desktop;
|
HDESK desktop, old_desktop;
|
||||||
|
USEROBJECTFLAGS flags;
|
||||||
INT count, old_count;
|
INT count, old_count;
|
||||||
DWORD error;
|
DWORD error;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
@ -1602,6 +1603,12 @@ static void test_EnumDisplayMonitors(void)
|
||||||
ok(ret, "SetProcessWindowStation failed, error %#x.\n", GetLastError());
|
ok(ret, "SetProcessWindowStation failed, error %#x.\n", GetLastError());
|
||||||
ok(winstation == GetProcessWindowStation(), "Expected %p, got %p.\n", GetProcessWindowStation(), winstation);
|
ok(winstation == GetProcessWindowStation(), "Expected %p, got %p.\n", GetProcessWindowStation(), winstation);
|
||||||
|
|
||||||
|
flags.fInherit = FALSE;
|
||||||
|
flags.fReserved = FALSE;
|
||||||
|
flags.dwFlags = WSF_VISIBLE;
|
||||||
|
ret = SetUserObjectInformationW(winstation, UOI_FLAGS, &flags, sizeof(flags));
|
||||||
|
ok(ret, "SetUserObjectInformationW failed, error %#x.\n", GetLastError());
|
||||||
|
|
||||||
desktop = CreateDesktopW(L"test_desktop", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL);
|
desktop = CreateDesktopW(L"test_desktop", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL);
|
||||||
ok(!!desktop && desktop != old_desktop, "CreateDesktopW failed, error %#x.\n", GetLastError());
|
ok(!!desktop && desktop != old_desktop, "CreateDesktopW failed, error %#x.\n", GetLastError());
|
||||||
ret = SetThreadDesktop(desktop);
|
ret = SetThreadDesktop(desktop);
|
||||||
|
|
Loading…
Reference in New Issue