[Xquartz-changes] xserver: Branch 'server-1.16-branch'
Jeremy Huddleston
jeremyhu at freedesktop.org
Tue Oct 13 13:46:16 PDT 2015
Rebased ref, commits from common ancestor:
commit 5cad42f94c24a588e385341c2538dc7b78767cf6
Author: Ken Thomases <ken at codeweavers.com>
Date: Mon Oct 12 16:45:41 2015 -0700
XQuartz: Fix how we calculate the height of the OSX menu bar
+[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]);
Reviewed-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Signed-off-by: Ken Thomases <ken at codeweavers.com>
(cherry picked from commit 73ab4a467d4d431380bac961effe9f08bf5ab9a2)
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 2efbd65..7be899b 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1239,8 +1239,14 @@ X11ApplicationMain(int argc, char **argv, char **envp)
QuartzModeBundleInit();
/* Calculate the height of the menubar so we can avoid it. */
- aquaMenuBarHeight = NSHeight([[NSScreen mainScreen] frame]) -
- NSMaxY([[NSScreen mainScreen] visibleFrame]);
+ aquaMenuBarHeight = [[NSApp mainMenu] menuBarHeight];
+ if (!aquaMenuBarHeight) {
+ aquaMenuBarHeight = [NSMenuView menuBarHeight];
+ }
+ if (!aquaMenuBarHeight) {
+ NSScreen* primaryScreen = [[NSScreen screens] objectAtIndex:0];
+ aquaMenuBarHeight = NSHeight([primaryScreen frame]) - NSMaxY([primaryScreen visibleFrame]);
+ }
#ifdef HAVE_LIBDISPATCH
eventTranslationQueue = dispatch_queue_create(
More information about the Xquartz-changes
mailing list