https://bugs.winehq.org/show_bug.cgi?id=52508
--- Comment #6 from Zhiyi Zhang zzhang@codeweavers.com --- (In reply to Zeb Figura from comment #5)
(In reply to Zhiyi Zhang from comment #4)
Actually, there is a mechanism to let only the first process initialize monitors. That's what the force parameter in X11DRV_DisplayDevices_Init() is for. Maybe recent win32u work changed its behavior or the first process to create windows isn't always 64-bit.
As far as I can tell that function ends up getting called with force == TRUE once for each process that calls GetDesktopWindow() (plus once for explorer.exe itself). The call chain goes:
GetDesktopWindow() -> retrieve top_window from server, call user_driver->pCreateDesktopWindow() -> X11DRV_CreateDesktopWindow() -> root_window is not yet initialized; call X11DRV_init_desktop()
I don't think this trace is correct. root_window is initialized in winex11.drv process_attach(). X11DRV_init_desktop should only be called when using virtual desktop. Are you using virtual desktop? I tried running explorer and then notepad and traced X11DRV_DisplayDevices_Init(). No X11DRV_DisplayDevices_Init(TRUE) calls are made for new processes.
-> set virtual desktop handler, call X11DRV_DisplayDevices_Init( TRUE )
The code organization here is too unclear for me to tell where the fault lies.