mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-14 11:35:48 +00:00
macOS: force surface layout sync in updateOSView (#12143)
`updateOSView` assumed SwiftUI always propagates frame changes to the scroll view. Under system load, this can be deferred, leaving the surface rendering at stale dimensions. Check for size mismatch and mark layout as needed. <img width="1408" height="464" alt="ghostty_bug" src="https://github.com/user-attachments/assets/3a6f81ff-9d02-4ffa-aded-e2eddc9f40a5" /> --- AI Disclosure: Used Claude Code for PR preparation.
This commit is contained in:
@@ -621,8 +621,13 @@ extension Ghostty {
|
||||
}
|
||||
|
||||
func updateOSView(_ scrollView: SurfaceScrollView, context: Context) {
|
||||
// Nothing to do: SwiftUI automatically updates the frame size, and
|
||||
// SurfaceScrollView handles the rest in response to that
|
||||
// SwiftUI may defer frame updates under system load (e.g., memory
|
||||
// pressure, heavy I/O) or when external window managers trigger rapid
|
||||
// layout changes. When that happens, the scroll view's bounds can
|
||||
// fall out of sync with the size reported by GeometryReader, causing
|
||||
// the surface to render at stale dimensions.
|
||||
guard scrollView.bounds.size != size else { return }
|
||||
scrollView.needsLayout = true
|
||||
}
|
||||
#else
|
||||
func makeOSView(context: Context) -> SurfaceView {
|
||||
|
||||
Reference in New Issue
Block a user