From b03ee5bc1b0ba96c7f14778efc8bfc152be8444e Mon Sep 17 00:00:00 2001 From: "Jared P. Jones" Date: Tue, 12 May 2015 01:16:55 -0500 Subject: [PATCH] OS X Fix: NSWindow no Longer Crashes on Resize *After doing research I found that Apple puts an NSWindow to sleep using (AppNap) after the window reaches below 4 pixels in height. *GLFW will now set a minimum height with the OS X default title bar height taken into consideration; this resolves the issue. Closes: #443 --- src/cocoa_window.m | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/cocoa_window.m b/src/cocoa_window.m index 42ba6811a..fc5508d94 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -648,6 +648,17 @@ static int translateKey(unsigned int key) return YES; } +- (float)titleBarHeight +{ + NSRect frame = NSMakeRect (0, 0, 100, 100); + + NSRect contentRect; + contentRect = [NSWindow contentRectForFrameRect: frame + styleMask: NSTitledWindowMask]; + + return (frame.size.height - contentRect.size.height); +} + @end @@ -898,6 +909,10 @@ static GLboolean createWindow(_GLFWwindow* window, [window->ns.object setDelegate:window->ns.delegate]; [window->ns.object setAcceptsMouseMovedEvents:YES]; + // OS X puts an application into "App Nap" if it's window size drops below 4-pixels. + NSUInteger minWindowHeight = 4; + [window->ns.object setMinSize:NSMakeSize(0, [window->ns.object titleBarHeight] + minWindowHeight)]; + #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6) [window->ns.object setRestorable:NO];