[Bug 34978] Display detection issue with the MacDriver

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Dec 19 21:11:51 CST 2013


http://bugs.winehq.org/show_bug.cgi?id=34978

Ken Thomases <ken at codeweavers.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|winemac.drv                 |user32

--- Comment #4 from Ken Thomases <ken at 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.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list