macOS: save effective fullscreen styles

pull/9559/head
Lukas 2025-11-11 16:09:38 +01:00
parent 8437be8ee1
commit 2debeb0f13
No known key found for this signature in database
GPG Key ID: 845CB61BD38F4E49
3 changed files with 23 additions and 6 deletions

View File

@ -66,6 +66,24 @@ 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

@ -8,10 +8,12 @@ class TerminalRestorableState: Codable {
let focusedSurface: String?
let surfaceTree: SplitTree<Ghostty.SurfaceView>
let effectiveFullscreenMode: FullscreenMode?
init(from controller: TerminalController) {
self.focusedSurface = controller.focusedSurface?.id.uuidString
self.surfaceTree = controller.surfaceTree
self.effectiveFullscreenMode = controller.effectiveFullscreenMode
}
init?(coder aDecoder: NSCoder) {
@ -28,6 +30,7 @@ class TerminalRestorableState: Codable {
self.surfaceTree = v.value.surfaceTree
self.focusedSurface = v.value.focusedSurface
self.effectiveFullscreenMode = v.value.effectiveFullscreenMode
}
func encode(with coder: NSCoder) {
@ -109,11 +112,7 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration {
}
completionHandler(window, nil)
// We don't restore the previous fullscreen mode. If the saved mode differs from
// the current configuration, using either could be confusing. Instead, we honor
// the configured mode (consistent with new_window behavior).
let mode = appDelegate.ghostty.config.windowFullscreenMode
guard mode != .native else {
guard let mode = state.effectiveFullscreenMode, mode != .native else {
// We let AppKit handle native fullscreen
return
}

View File

@ -2,7 +2,7 @@ import Cocoa
import GhosttyKit
/// The fullscreen modes we support define how the fullscreen behaves.
enum FullscreenMode {
enum FullscreenMode: String, Codable {
case native
case nonNative
case nonNativeVisibleMenu