From 1f30e4e2ed4665afb6d9bf2f272247ecbecaa045 Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Fri, 29 Sep 2023 12:46:22 -0400 Subject: [PATCH] macos: adjust fullscreen frame height for notch The macOS desktop menu-bar grows in total height by adding extra padding to deal with the physical notch found on various MacBook displays. When config `macos-non-native-fullscreen = visible-menu` we apply `safeAreaInsets.top` to reduce frame height. --- macos/Sources/Helpers/FullScreenHandler.swift | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/macos/Sources/Helpers/FullScreenHandler.swift b/macos/Sources/Helpers/FullScreenHandler.swift index 2fe650587..2430ca942 100644 --- a/macos/Sources/Helpers/FullScreenHandler.swift +++ b/macos/Sources/Helpers/FullScreenHandler.swift @@ -93,7 +93,7 @@ class FullScreenHandler { var previousTabGroup: NSWindowTabGroup? window.styleMask.remove(.titled) // Set frame to screen size, accounting for the menu bar if needed - let frame = calculateFullscreenFrame(screenFrame: screen.frame, subtractMenu: !hideMenu) + let frame = calculateFullscreenFrame(screen: screen, subtractMenu: !hideMenu) window.setFrame(frame, display: true) // Focus window @@ -116,12 +116,23 @@ class FullScreenHandler { var previousTabGroup: NSWindowTabGroup? NSApp.presentationOptions.remove(.autoHideDock) } - func calculateFullscreenFrame(screenFrame: NSRect, subtractMenu: Bool)->NSRect { + func calculateFullscreenFrame(screen: NSScreen, subtractMenu: Bool)->NSRect { if (subtractMenu) { - let menuHeight = NSApp.mainMenu?.menuBarHeight ?? 0 - return NSMakeRect(screenFrame.minX, screenFrame.minY, screenFrame.width, screenFrame.height - menuHeight) + if let menuHeight = NSApp.mainMenu?.menuBarHeight { + var padding: CGFloat = 0 + if #available(macOS 12, *) { + padding = screen.safeAreaInsets.top; + } + + return NSMakeRect( + screen.frame.minX, + screen.frame.minY, + screen.frame.width, + screen.frame.height - (menuHeight + padding) + ) + } } - return screenFrame + return screen.frame } func leaveFullscreen(window: NSWindow) {