From: Sven Baars sbaars@codeweavers.com
The wayland driver does this during initialization. --- dlls/win32u/driver.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index 12390c026ce..e2ef78f1818 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -1314,8 +1314,16 @@ void __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT version return; }
+ if (!funcs) + { + prev = InterlockedExchangePointer( (void **)&user_driver, (void *)&lazy_load_driver ); + if (prev != &lazy_load_driver) + free( prev ); + return; + } + driver = malloc( sizeof(*driver) ); - *driver = funcs ? *funcs : null_user_driver; + *driver = *funcs;
#define SET_USER_FUNC(name) \ do { if (!driver->p##name) driver->p##name = nulldrv_##name; } while(0)