http://bugs.winehq.org/show_bug.cgi?id=34978
Ken Thomases ken@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|winemac.drv |user32
--- Comment #4 from Ken Thomases ken@codeweavers.com --- This is a very strange bug.
In general, the Mac driver has pretty good support for multi-monitor configurations. I believe it's as good as the X11 driver's support. Neither is quite right in relatively minor ways.
The problem is actually in user32. EnumDisplayDevicesW() is a stub. It only ever reports a single device, no matter how many displays there actually are. Furthermore, it uses the name "X11 Windowing System" for them, regardless of which driver is being used.
You would think that this would lead DisplayFusion to only ever show a single display, like it does with the Mac driver. But it shows both displays with the X11 driver. That was a difficult mystery to crack.
The reason is that XQuartz reports a fake display mode through the XRandR extension. It does this as a strategy for dealing with full-screen programs. It's actually a strategy that I used first in CrossOver and suggested to the XQuartz implementers. The idea is the X server reports all of the real display modes for the primary display plus a fake one which includes the full size of the desktop, excluding the Mac menu bar. If a program switches the display mode to any of the real ones, then the X server hides the menu bar and the Dock to let the client use the full screen. If a program switches the mode back to the fake one, which was the original mode, then the X server restores the menu bar and Dock.
Anyway, when you have multiple displays, this fake mode spans all of them. It seems that DisplayFusion finds this confusing. The fake mode is larger than the size of the primary monitor as reported by GetMonitorInfo(). Evidently, this causes DisplayFusion to ignore the results of EnumDisplayDevices() and instead rely on EnumDisplayMonitors() and GetMonitorInfo(). That's why it doesn't use the "X11 Windowing System" name and instead calls the displays "Unknown".
I have confirmed by hacking the Mac driver so that it also reports a fake display mode that spans the whole desktop. When I do that, DisplayFusion shows all of the displays, just like it does with the X11 driver. But the real solution will probably be to implement EnumDisplayDevices() correctly.