mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-04-20 08:28:51 +03:00

This is a bug I noticed in the following scenario: 1. Open Ghostty 2. Fullscreen normal terminal window (native fullscreen) 3. Open quick terminal 4. Move spaces, QT follows 5. Fullscreen the quick terminal The result was that the menu bar would not disappear since our app is not frontmost but we set the fullscreen frame such that we expected it.
44 lines
1.6 KiB
Swift
44 lines
1.6 KiB
Swift
import Cocoa
|
|
|
|
// MARK: Presentation Options
|
|
|
|
extension NSApplication {
|
|
private static var presentationOptionCounts: [NSApplication.PresentationOptions.Element: UInt] = [:]
|
|
|
|
/// Add a presentation option to the application and main a reference count so that and equal
|
|
/// number of pops is required to disable it. This is useful so that multiple classes can affect global
|
|
/// app state without overriding others.
|
|
func acquirePresentationOption(_ option: NSApplication.PresentationOptions.Element) {
|
|
Self.presentationOptionCounts[option, default: 0] += 1
|
|
presentationOptions.insert(option)
|
|
}
|
|
|
|
/// See acquirePresentationOption
|
|
func releasePresentationOption(_ option: NSApplication.PresentationOptions.Element) {
|
|
guard let value = Self.presentationOptionCounts[option] else { return }
|
|
guard value > 0 else { return }
|
|
if (value == 1) {
|
|
presentationOptions.remove(option)
|
|
Self.presentationOptionCounts.removeValue(forKey: option)
|
|
} else {
|
|
Self.presentationOptionCounts[option] = value - 1
|
|
}
|
|
}
|
|
}
|
|
|
|
extension NSApplication.PresentationOptions.Element: @retroactive Hashable {
|
|
public func hash(into hasher: inout Hasher) {
|
|
hasher.combine(rawValue)
|
|
}
|
|
}
|
|
|
|
// MARK: Frontmost
|
|
|
|
extension NSApplication {
|
|
/// True if the application is frontmost. This isn't exactly the same as isActive because
|
|
/// an app can be active but not be frontmost if the window with activity is an NSPanel.
|
|
var isFrontmost: Bool {
|
|
NSWorkspace.shared.frontmostApplication?.bundleIdentifier == Bundle.main.bundleIdentifier
|
|
}
|
|
}
|