Module: wine Branch: master Commit: af4294a9af1b5b9f9ee7f3fa7561b6ade6e5ac05 URL: http://source.winehq.org/git/wine.git/?a=commit;h=af4294a9af1b5b9f9ee7f3fa75...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Feb 9 15:12:58 2017 +0100
user32: Allow creating windows using null driver for invisible winstations.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/driver.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c index c4cbb8a..d59a2ea 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -39,6 +39,8 @@ static USER_DRIVER null_driver, lazy_load_driver; const USER_DRIVER *USER_Driver = &lazy_load_driver; static char driver_load_error[80];
+static BOOL CDECL nodrv_CreateWindow( HWND hwnd ); + static HMODULE load_desktop_driver( HWND hwnd ) { static const WCHAR display_device_guid_propW[] = { @@ -152,6 +154,16 @@ static const USER_DRIVER *load_driver(void) GET_USER_FUNC(ThreadDetach); #undef GET_USER_FUNC } + else + { + USEROBJECTFLAGS flags; + HWINSTA winstation; + + winstation = GetProcessWindowStation(); + if (!GetUserObjectInformationA(winstation, UOI_FLAGS, &flags, sizeof(flags), NULL) + || (flags.dwFlags & WSF_VISIBLE)) + driver->pCreateWindow = nodrv_CreateWindow; + }
prev = InterlockedCompareExchangePointer( (void **)&USER_Driver, driver, &lazy_load_driver ); if (prev != &lazy_load_driver) @@ -360,7 +372,7 @@ static BOOL CDECL nulldrv_CreateDesktopWindow( HWND hwnd ) return TRUE; }
-static BOOL CDECL nulldrv_CreateWindow( HWND hwnd ) +static BOOL CDECL nodrv_CreateWindow( HWND hwnd ) { static int warned; HWND parent = GetAncestor( hwnd, GA_PARENT ); @@ -374,6 +386,11 @@ static BOOL CDECL nulldrv_CreateWindow( HWND hwnd ) return FALSE; }
+static BOOL CDECL nulldrv_CreateWindow( HWND hwnd ) +{ + return TRUE; +} + static void CDECL nulldrv_DestroyWindow( HWND hwnd ) { }