fix: vibrancy window border (#46772)

fix: vibrancy window border (#46648)

* fix: vibrancy window border

* Use WidgetDelegate::OnWidgetInitialized instead

Co-authored-by: Calvin <clavin@users.noreply.github.com>
This commit is contained in:
trop[bot] 2025-04-25 11:35:32 -04:00 committed by GitHub
parent d605b97f9a
commit b123b07d87
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 0 deletions

View file

@ -225,6 +225,7 @@ class NativeWindowMac : public NativeWindow,
bool CanMaximize() const override;
std::unique_ptr<views::NonClientFrameView> CreateNonClientFrameView(
views::Widget* widget) override;
void OnWidgetInitialized() override;
// ui::NativeThemeObserver:
void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override;

View file

@ -1861,6 +1861,28 @@ std::optional<gfx::Rect> NativeWindowMac::GetWindowControlsOverlayRect() {
return std::nullopt;
}
void NativeWindowMac::OnWidgetInitialized() {
// |window_| is not yet assigned when this function is called, so we need to
// get the window from the widget.
NSWindow* window = widget()->GetNativeWindow().GetNativeNSWindow();
// In |NativeWidgetNSWindowBridge::InitCompositorView| in Chromium,
// translucent windows are assigned a clear background color. This causes
// undesirable side effects, such as a window with vibrancy losing its natural
// system border highlight. We undo that behavior here.
//
// Ref:
// https://source.chromium.org/chromium/chromium/src/+/main:components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm;l=1341-1342;drc=e7c8be576285195257b0813326b3bab154dc7e73
if (!transparent()) {
if ([[window backgroundColor] isEqual:NSColor.clearColor]) {
[window setBackgroundColor:NSColor.windowBackgroundColor];
}
if (![window isOpaque]) {
[window setOpaque:YES];
}
}
}
// static
std::unique_ptr<NativeWindow> NativeWindow::Create(
const gin_helper::Dictionary& options,