https://bugs.winehq.org/show_bug.cgi?id=55810
Zeb Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|advapi32 |user32 CC| |rbernon@codeweavers.com, | |zzhang@codeweavers.com
--- Comment #9 from Zeb Figura z.figura12@gmail.com --- (In reply to Béla Gyebrószki from comment #8)
(In reply to Zeb Figura from comment #7)
Created attachment 75411 [details] hack is_virtual_desktop() to always return true
Does the attached hack fix all of the reported symptoms?
The hack works for me regarding the issue with Finding Nemo.
Thanks, makes sense.
I think I can kind of handwave where the missing decorations are going. is_virtual_desktop() returns FALSE despite us having a virtual desktop, which causes some parts of Wine to report the actual screen size, and when the virtual desktop is resized to the screen size we remove the decorations so that it's effectively fullscreen. But we're not actually resizing the window, it's just in an inconsistent state.
is_virtual_desktop() returns FALSE because Steam (actually steamwebhelper I think) is creating a new winstation and desktop via CreateWindowStation() / CreateDesktop(). Previously this did not happen, because GetSecurityInfo() failed, avoiding that code path entirely.
I can only assume that the actual rendered UI windows aren't associated with the new desktop (they're not created on the same thread, at least). But creating the desktop triggers GPU reënumeration anyway, and is_virtual_desktop() returns FALSE during that process, and that causes the monitor to report the real size of the screen. This also explains why the Steam window clamps its size to the screen edges previously, but not anymore.
Probably is_virtual_desktop() needs to determine whether the desktop is virtual elsehow. I haven't investigated what the right architecture should be here. CC'ing Rémi and Zhiyi since I think they're familiar with this code and may have immediate opinions; if not I'll keep researching.