fix: vibrant view is inserted into Views API hierarchy (#42263)

This commit is contained in:
Hans Halverson 2024-06-05 11:14:22 -07:00 committed by GitHub
parent 484cf26787
commit e645ea88e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 7 deletions

View file

@ -1393,13 +1393,19 @@ void NativeWindowMac::SetVibrancy(const std::string& type) {
NativeWindow::SetVibrancy(type);
NSVisualEffectView* vibrantView = [window_ vibrantView];
views::View* rootView = GetContentsView();
if (type.empty()) {
if (vibrantView == nil)
return;
if (vibrant_native_view_host_ != nullptr) {
// Transfers ownership back to caller in the form of a unique_ptr which is
// subsequently deleted.
rootView->RemoveChildViewT(vibrant_native_view_host_);
vibrant_native_view_host_ = nullptr;
}
[vibrantView removeFromSuperview];
[window_ setVibrantView:nil];
if (vibrantView != nil) {
[window_ setVibrantView:nil];
}
return;
}
@ -1455,9 +1461,13 @@ void NativeWindowMac::SetVibrancy(const std::string& type) {
[vibrantView setState:NSVisualEffectStateFollowsWindowActiveState];
}
[[window_ contentView] addSubview:vibrantView
positioned:NSWindowBelow
relativeTo:nil];
// Vibrant view is inserted into the root view hierarchy underneath all
// other views.
vibrant_native_view_host_ = new views::NativeViewHost();
rootView->AddChildViewAt(vibrant_native_view_host_, 0);
vibrant_native_view_host_->Attach(vibrantView);
rootView->DeprecatedLayoutImmediately();
UpdateVibrancyRadii(IsFullscreen());
}