mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-10-05 17:36:32 +00:00
macos: only hide dock on the screen with the dock
This commit is contained in:
36
macos/Sources/Helpers/NSScreen+Extension.swift
Normal file
36
macos/Sources/Helpers/NSScreen+Extension.swift
Normal file
@@ -0,0 +1,36 @@
|
||||
import Cocoa
|
||||
|
||||
extension NSScreen {
|
||||
// Returns true if the given screen has a visible dock. This isn't
|
||||
// point-in-time visible, this is true if the dock is always visible
|
||||
// AND present on this screen.
|
||||
var hasDock: Bool {
|
||||
// If the dock autohides then we don't have a dock ever.
|
||||
if let dockAutohide = UserDefaults.standard.persistentDomain(forName: "com.apple.dock")?["autohide"] as? Bool {
|
||||
if (dockAutohide) { return false }
|
||||
}
|
||||
|
||||
// There is no public API to directly ask about dock visibility, so we have to figure it out
|
||||
// by comparing the sizes of visibleFrame (the currently usable area of the screen) and
|
||||
// frame (the full screen size). We also need to account for the menubar, any inset caused
|
||||
// by the notch on macbooks, and a little extra padding to compensate for the boundary area
|
||||
// which triggers showing the dock.
|
||||
|
||||
// If our visible width is less than the frame we assume its the dock.
|
||||
if (visibleFrame.width < frame.width) {
|
||||
return true
|
||||
}
|
||||
|
||||
// We need to see if our visible frame height is less than the full
|
||||
// screen height minus the menu and notch and such.
|
||||
let menuHeight = NSApp.mainMenu?.menuBarHeight ?? 0
|
||||
let notchInset: CGFloat = if #available(macOS 12, *) {
|
||||
safeAreaInsets.top
|
||||
} else {
|
||||
0
|
||||
}
|
||||
let boundaryAreaPadding = 5.0
|
||||
|
||||
return visibleFrame.height < (frame.height - max(menuHeight, notchInset) - boundaryAreaPadding)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user