macOS: save effective fullscreen styles
parent
8437be8ee1
commit
2debeb0f13
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue