mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
macos: invalid restorable state whenever surface tree changes
Related to #1177 This detects whenever the surface tree (splits) change in any way and requests that the restorable state be invalided by macOS.
This commit is contained in:
@ -470,6 +470,12 @@ class TerminalController: NSWindowController, NSWindowDelegate,
|
||||
self.window?.close()
|
||||
}
|
||||
|
||||
func surfaceTreeDidChange() {
|
||||
// Whenever our surface tree changes in any way (new split, close split, etc.)
|
||||
// we want to invalidate our state.
|
||||
invalidateRestorableState()
|
||||
}
|
||||
|
||||
//MARK: - Clipboard Confirmation
|
||||
|
||||
func clipboardConfirmationComplete(_ action: ClipboardConfirmationView.Action, _ request: Ghostty.ClipboardRequest) {
|
||||
|
@ -13,6 +13,10 @@ protocol TerminalViewDelegate: AnyObject {
|
||||
|
||||
/// The cell size changed.
|
||||
func cellSizeDidChange(to: NSSize)
|
||||
|
||||
/// The surface tree did change in some way, i.e. a split was added, removed, etc. This is
|
||||
/// not called initially.
|
||||
func surfaceTreeDidChange()
|
||||
}
|
||||
|
||||
// Default all the functions so they're optional
|
||||
@ -97,6 +101,12 @@ struct TerminalView<ViewModel: TerminalViewModel>: View {
|
||||
guard let size = newValue else { return }
|
||||
self.delegate?.cellSizeDidChange(to: size)
|
||||
}
|
||||
.onChange(of: viewModel.surfaceTree?.hashValue) { _ in
|
||||
// This is funky, but its the best way I could think of to detect
|
||||
// ANY CHANGE within the deeply nested surface tree -- detecting a change
|
||||
// in the hash value.
|
||||
self.delegate?.surfaceTreeDidChange()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user