macOS: restore non native fullscreen styles (#9559)
Fixes #8435 > [!NOTE] > Used AI to proofread my commentspull/9570/head
commit
682cb6c888
|
|
@ -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.fullscreenStyle?.fullscreenMode
|
||||
}
|
||||
|
||||
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,6 +112,13 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration {
|
|||
}
|
||||
|
||||
completionHandler(window, nil)
|
||||
guard let mode = state.effectiveFullscreenMode, mode != .native else {
|
||||
// We let AppKit handle native fullscreen
|
||||
return
|
||||
}
|
||||
// Give the window to AppKit first, then adjust its frame and style
|
||||
// to minimise any visible frame changes.
|
||||
c.toggleFullscreen(mode: mode)
|
||||
}
|
||||
|
||||
/// This restores the focus state of the surfaceview within the given window. When restoring,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -31,6 +31,7 @@ enum FullscreenMode {
|
|||
/// 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) }
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue