https://bugs.winehq.org/show_bug.cgi?id=42940
Ken Thomases ken@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |ken@codeweavers.com
--- Comment #3 from Ken Thomases ken@codeweavers.com --- OK. I see what's happening here.
There are two kinds of windows, those which are drawn "normally" via GDI and those which are drawn via OpenGL, D3D, or D2D. (In Wine, D3D and D2D are built on top of OpenGL.)
In general with the Mac driver, "behind" mode will be needed for correct behavior whenever an app tries to display a normal window on top of an OpenGL window. Otherwise, Cocoa puts the OpenGL surface in front of all of the normal windows and it obscures them. With behind mode, the OpenGL surface is behind the normal windows and the normal windows are made transparent in the places where it needs to show through. So, you get the proper appearance.
The issue here has to do with knowing whether transparent holes need to be made in the normal windows. The current Mac driver code creates the transparent holes if any child window has an OpenGL context attached to it. The problem is that WAtomic attaches the context only temporarily to update the graphics but then detaches it. That leaves the Mac driver thinking there's no need to make transparent holes.
I will have to change the Mac driver logic so it keeps track of whether a window has _ever_ had an OpenGL context attached to it, not whether it currently does.