I've got 2.7.8 rc3 installed now, and it seems to work fine, even after some attempts to break it.

Thanks,

--Tom Seddon

On 13/10/2015 06:27, Jeremy Huddleston Sequoia wrote:
Thanks Ken.

Tom, could you give Ken's suggested logic a try and make sure it works for you? 
 Could you send a followup patch?  If not, I'll try to knock that out when I 
get some more cycles.

--Jeremy


On Oct 12, 2015, at 20:44, Ken Thomases <k...@codeweavers.com> wrote:

On Oct 12, 2015, at 10:09 PM, Jeremy Huddleston Sequoia <jerem...@apple.com> 
wrote:

Can you try installing 2.7.8_rc1, backing up 
/Applications/Utilities/XQuartz.app/Contents/MacOS/X11.bin, updating to 
2.7.8_rc2, and then replacing that file with the old one?

I suspect this is a regression from 
http://cgit.freedesktop.org/~jeremyhu/xserver/commit/?h=server-1.16-apple&id=cac50177f99fb819bfaeea1f2ac33e38fc574eb3

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 2efbd65..a9ee693 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1240,7 +1240,7 @@ X11ApplicationMain(int argc, char **argv, char **envp)

     /* Calculate the height of the menubar so we can avoid it. */
     aquaMenuBarHeight = NSHeight([[NSScreen mainScreen] frame]) -
-                        NSMaxY([[NSScreen mainScreen] visibleFrame]);
+                        NSHeight([[NSScreen mainScreen] visibleFrame]);

#ifdef HAVE_LIBDISPATCH
     eventTranslationQueue = dispatch_queue_create(

+[NSScreen mainScreen] does not mean the primary display.  It used to mean the one with 
the key window.  When "Displays have separate spaces" is enabled, it means the 
active screen, the one whose menu bar is mostly opaque.  As such, it may not be the 
screen whose lower-left corner is located at (0, 0).  That's why its max-Y is not 
necessarily comparable to its height.  That only works for the primary display.

This code could use [[NSScreen screens] firstObject].  This is always the 
primary display, the one whose lower-left corner is at (0, 0).

Once that's done, the above change should be reverted.  The height of the 
visible frame would be the full height of the screen minus the menu bar _and 
the Dock_ if the Dock is along the bottom of the screen.

Actually, there's a theoretically-simpler approach: use -[NSMenu 
menuBarHeight].  That replaces a long-deprecated method +[NSMenuView 
menuBarHeight].  However, there was a bug in Tiger that led to the former not 
working while the latter still worked.  I haven't actually checked recently.

CrossOver's still-kicking X server code uses this code, which tries all of the 
above:

        NSScreen* primaryScreen = [[NSScreen screens] objectAtIndex:0];
        aquaMenuBarHeight = [[NSApp mainMenu] menuBarHeight];
        if (!aquaMenuBarHeight) aquaMenuBarHeight = [NSMenuView menuBarHeight];
        if (!aquaMenuBarHeight) aquaMenuBarHeight =
            NSHeight([primaryScreen frame]) - NSMaxY([primaryScreen 
visibleFrame]);


Regards,
Ken


_______________________________________________
Xquartz-dev mailing list
Xquartz-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/xquartz-dev



_______________________________________________
Xquartz-dev mailing list
Xquartz-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/xquartz-dev

Reply via email to