@@ -25,23 +25,29 @@ final class BrowserPageHostView: NSView {
2525
2626 let shouldRestoreFirstResponder = shouldTransferFirstResponder ( from: previousContentView)
2727
28- previousContentView? . removeFromSuperview ( )
29- hostedContentView = nil
28+ if isSameContentView {
29+ hostedContentView = nil
30+ } else {
31+ detachHostedContentView ( )
32+ }
3033
3134 guard let newContentView else {
32- needsLayout = true
33- layoutSubtreeIfNeeded ( )
34- displayIfNeeded ( )
35+ refreshHostingLayout ( )
3536 return
3637 }
3738
3839 configure ( contentView: newContentView)
3940
41+ if let previousHost = newContentView. superview as? BrowserPageHostView ,
42+ previousHost !== self
43+ {
44+ previousHost. releaseHostedContentView ( newContentView)
45+ }
46+
4047 if newContentView. superview !== self {
41- if let previousHost = newContentView. superview as? BrowserPageHostView {
42- previousHost . hostedContentView = nil
48+ if newContentView. superview != nil {
49+ newContentView . removeFromSuperview ( )
4350 }
44- newContentView. removeFromSuperview ( )
4551 addSubview ( newContentView)
4652 }
4753
@@ -72,6 +78,33 @@ final class BrowserPageHostView: NSView {
7278 contentView. layer? . drawsAsynchronously = true
7379 }
7480
81+ private func detachHostedContentView( ) {
82+ guard let hostedContentView else {
83+ return
84+ }
85+
86+ if hostedContentView. superview === self {
87+ hostedContentView. removeFromSuperview ( )
88+ }
89+
90+ self . hostedContentView = nil
91+ }
92+
93+ private func releaseHostedContentView( _ contentView: NSView ) {
94+ guard hostedContentView === contentView else {
95+ return
96+ }
97+
98+ detachHostedContentView ( )
99+ refreshHostingLayout ( )
100+ }
101+
102+ private func refreshHostingLayout( ) {
103+ needsLayout = true
104+ layoutSubtreeIfNeeded ( )
105+ displayIfNeeded ( )
106+ }
107+
75108 private func shouldTransferFirstResponder( from previousContentView: NSView ? ) -> Bool {
76109 guard let previousContentView,
77110 let firstResponder = window? . firstResponder as? NSView
0 commit comments