macos: AppState config must be published and observed

Fixes #440

We previously weren't observing changes so they weren't being
automatically propagated. We were using an old pointer which at best
returned the wrong value and at worst crashed. I was able to make it
crash eventually, too.

This changes the fields to be properly published and observed and as a
result the config is immediately available to all users.
This commit is contained in:
Mitchell Hashimoto
2023-09-13 15:06:41 -07:00
parent 238d68fbbb
commit c1fe1f6646
2 changed files with 3 additions and 3 deletions

View File

@ -2,7 +2,7 @@ import SwiftUI
import GhosttyKit
struct PrimaryView: View {
let ghostty: Ghostty.AppState
@ObservedObject var ghostty: Ghostty.AppState
// We need access to our app delegate to know if we're quitting or not.
// Make sure to use `@ObservedObject` so we can keep track of `appDelegate.confirmQuit`.

View File

@ -23,7 +23,7 @@ extension Ghostty {
/// The ghostty global configuration. This should only be changed when it is definitely
/// safe to change. It is definite safe to change only when the embedded app runtime
/// in Ghostty says so (usually, only in a reload configuration callback).
var config: ghostty_config_t? = nil {
@Published var config: ghostty_config_t? = nil {
didSet {
// Free the old value whenever we change
guard let old = oldValue else { return }
@ -33,7 +33,7 @@ extension Ghostty {
/// The ghostty app instance. We only have one of these for the entire app, although I guess
/// in theory you can have multiple... I don't know why you would...
var app: ghostty_app_t? = nil {
@Published var app: ghostty_app_t? = nil {
didSet {
guard let old = oldValue else { return }
ghostty_app_free(old)