macos: use Ghostty.AppState as @EnvironmentObject

This is a small cleanup change. This provides the Ghostty.AppState
object to any view that needs it within the TerminalSplit view hierarchy
without needing to explicitly define EnvironmentKeys.
This commit is contained in:
Gregory Anders
2023-11-05 20:09:38 -06:00
parent 9b14398153
commit 582df33083
3 changed files with 4 additions and 38 deletions

View File

@ -85,8 +85,6 @@ struct TerminalView<ViewModel: TerminalViewModel>: View {
Ghostty.TerminalSplit(node: $viewModel.surfaceTree) Ghostty.TerminalSplit(node: $viewModel.surfaceTree)
.environmentObject(ghostty) .environmentObject(ghostty)
.ghosttyApp(ghostty.app!)
.ghosttyConfig(ghostty.config!)
.focused($focused) .focused($focused)
.onAppear { self.focused = true } .onAppear { self.focused = true }
.onChange(of: focusedSurface) { newValue in .onChange(of: focusedSurface) { newValue in

View File

@ -582,35 +582,3 @@ extension Ghostty {
} }
} }
} }
// MARK: AppState Environment Keys
private struct GhosttyAppKey: EnvironmentKey {
static let defaultValue: ghostty_app_t? = nil
}
private struct GhosttyConfigKey: EnvironmentKey {
static let defaultValue: ghostty_config_t? = nil
}
extension EnvironmentValues {
var ghosttyApp: ghostty_app_t? {
get { self[GhosttyAppKey.self] }
set { self[GhosttyAppKey.self] = newValue }
}
var ghosttyConfig: ghostty_config_t? {
get { self[GhosttyConfigKey.self] }
set { self[GhosttyConfigKey.self] = newValue }
}
}
extension View {
func ghosttyApp(_ app: ghostty_app_t?) -> some View {
environment(\.ghosttyApp, app)
}
func ghosttyConfig(_ config: ghostty_config_t?) -> some View {
environment(\.ghosttyConfig, config)
}
}

View File

@ -4,11 +4,11 @@ import GhosttyKit
extension Ghostty { extension Ghostty {
/// Render a terminal for the active app in the environment. /// Render a terminal for the active app in the environment.
struct Terminal: View { struct Terminal: View {
@Environment(\.ghosttyApp) private var app @EnvironmentObject private var ghostty: Ghostty.AppState
@FocusedValue(\.ghosttySurfaceTitle) private var surfaceTitle: String? @FocusedValue(\.ghosttySurfaceTitle) private var surfaceTitle: String?
var body: some View { var body: some View {
if let app = self.app { if let app = self.ghostty.app {
SurfaceForApp(app) { surfaceView in SurfaceForApp(app) { surfaceView in
SurfaceWrapper(surfaceView: surfaceView) SurfaceWrapper(surfaceView: surfaceView)
} }
@ -48,7 +48,7 @@ extension Ghostty {
// Maintain whether our window has focus (is key) or not // Maintain whether our window has focus (is key) or not
@State private var windowFocus: Bool = true @State private var windowFocus: Bool = true
@Environment(\.ghosttyConfig) private var ghostty_config @EnvironmentObject private var ghostty: Ghostty.AppState
// This is true if the terminal is considered "focused". The terminal is focused if // This is true if the terminal is considered "focused". The terminal is focused if
// it is both individually focused and the containing window is key. // it is both individually focused and the containing window is key.
@ -58,7 +58,7 @@ extension Ghostty {
private var unfocusedOpacity: Double { private var unfocusedOpacity: Double {
var opacity: Double = 0.85 var opacity: Double = 0.85
let key = "unfocused-split-opacity" let key = "unfocused-split-opacity"
_ = ghostty_config_get(ghostty_config, &opacity, key, UInt(key.count)) _ = ghostty_config_get(ghostty.config, &opacity, key, UInt(key.count))
return 1 - opacity return 1 - opacity
} }