macos: Require fullScreenMode on fullscreenStyle

pull/9559/head
Mitchell Hashimoto 2025-11-11 09:21:08 -08:00
parent 2debeb0f13
commit eff3619878
No known key found for this signature in database
GPG Key ID: 523D5DC389D273BC
3 changed files with 7 additions and 19 deletions

View File

@ -66,24 +66,6 @@ class BaseTerminalController: NSWindowController,
/// Fullscreen state management.
private(set) var fullscreenStyle: FullscreenStyle?
/// The current effective fullscreen mode.
/// This is non-nil only while the window is in fullscreen.
var effectiveFullscreenMode: FullscreenMode? {
guard let fullscreenStyle, fullscreenStyle.isFullscreen else {
return nil
}
switch fullscreenStyle {
case is NativeFullscreen: return .native
case is NonNativeFullscreen: return .nonNative
case is NonNativeFullscreenPaddedNotch: return .nonNativePaddedNotch
case is NonNativeFullscreenVisibleMenu: return .nonNativeVisibleMenu
default:
assertionFailure("Missing case here")
return nil
}
}
/// Event monitor (see individual events for why)
private var eventMonitor: Any? = nil

View File

@ -13,7 +13,7 @@ class TerminalRestorableState: Codable {
init(from controller: TerminalController) {
self.focusedSurface = controller.focusedSurface?.id.uuidString
self.surfaceTree = controller.surfaceTree
self.effectiveFullscreenMode = controller.effectiveFullscreenMode
self.effectiveFullscreenMode = controller.fullscreenStyle?.fullscreenMode
}
init?(coder aDecoder: NSCoder) {

View File

@ -31,6 +31,7 @@ enum FullscreenMode: String, Codable {
/// Protocol that must be implemented by all fullscreen styles.
protocol FullscreenStyle {
var delegate: FullscreenDelegate? { get set }
var fullscreenMode: FullscreenMode { get }
var isFullscreen: Bool { get }
var supportsTabs: Bool { get }
init?(_ window: NSWindow)
@ -87,6 +88,7 @@ class FullscreenBase {
/// macOS native fullscreen. This is the typical behavior you get by pressing the green fullscreen
/// button on regular titlebars.
class NativeFullscreen: FullscreenBase, FullscreenStyle {
var fullscreenMode: FullscreenMode { .native }
var isFullscreen: Bool { window.styleMask.contains(.fullScreen) }
var supportsTabs: Bool { true }
@ -127,6 +129,8 @@ class NativeFullscreen: FullscreenBase, FullscreenStyle {
}
class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
var fullscreenMode: FullscreenMode { .nonNative }
// Non-native fullscreen never supports tabs because tabs require
// the "titled" style and we don't have it for non-native fullscreen.
var supportsTabs: Bool { false }
@ -439,10 +443,12 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
}
class NonNativeFullscreenVisibleMenu: NonNativeFullscreen {
override var fullscreenMode: FullscreenMode { .nonNativeVisibleMenu }
override var properties: Properties { Properties(hideMenu: false) }
}
class NonNativeFullscreenPaddedNotch: NonNativeFullscreen {
override var fullscreenMode: FullscreenMode { .nonNativePaddedNotch }
override var properties: Properties { Properties(paddedNotch: true) }
}