mirror of
https://github.com/electron/electron.git
synced 2026-01-08 23:18:06 -05:00
fix: window accentColor should adhere to native window behavior (#47740)
* fix: window accentColor should adhere to native window behavior * fix: address review feedback * chore: remove duplicate UpdateWindowAccentColor call in ctor
This commit is contained in:
@@ -420,8 +420,6 @@ NativeWindowViews::NativeWindowViews(const gin_helper::Dictionary& options,
|
||||
last_window_state_ = ui::mojom::WindowShowState::kFullscreen;
|
||||
else
|
||||
last_window_state_ = ui::mojom::WindowShowState::kNormal;
|
||||
|
||||
UpdateWindowAccentColor();
|
||||
#endif
|
||||
|
||||
// Listen to mouse events.
|
||||
@@ -1732,6 +1730,12 @@ void NativeWindowViews::OnWidgetActivationChanged(views::Widget* changed_widget,
|
||||
NativeWindow::NotifyWindowBlur();
|
||||
}
|
||||
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
// Update accent color based on activation state when no explicit color is
|
||||
// set.
|
||||
UpdateWindowAccentColor(active);
|
||||
#endif
|
||||
|
||||
// Hide menu bar when window is blurred.
|
||||
if (!active && IsMenuBarAutoHide() && IsMenuBarVisible())
|
||||
SetMenuBarVisibility(false);
|
||||
|
||||
@@ -222,7 +222,7 @@ class NativeWindowViews : public NativeWindow,
|
||||
void ResetWindowControls();
|
||||
void SetRoundedCorners(bool rounded);
|
||||
void SetForwardMouseMessages(bool forward);
|
||||
void UpdateWindowAccentColor();
|
||||
void UpdateWindowAccentColor(bool active);
|
||||
static LRESULT CALLBACK SubclassProc(HWND hwnd,
|
||||
UINT msg,
|
||||
WPARAM w_param,
|
||||
|
||||
@@ -499,7 +499,7 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||
return false;
|
||||
}
|
||||
case WM_DWMCOLORIZATIONCOLORCHANGED: {
|
||||
UpdateWindowAccentColor();
|
||||
UpdateWindowAccentColor(IsActive());
|
||||
return false;
|
||||
}
|
||||
case WM_SETTINGCHANGE: {
|
||||
@@ -507,7 +507,7 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||
const wchar_t* setting_name = reinterpret_cast<const wchar_t*>(l_param);
|
||||
std::wstring setting_str(setting_name);
|
||||
if (setting_str == L"ImmersiveColorSet")
|
||||
UpdateWindowAccentColor();
|
||||
UpdateWindowAccentColor(IsActive());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -570,7 +570,7 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
|
||||
}
|
||||
}
|
||||
|
||||
void NativeWindowViews::UpdateWindowAccentColor() {
|
||||
void NativeWindowViews::UpdateWindowAccentColor(bool active) {
|
||||
if (base::win::GetVersion() < base::win::Version::WIN11)
|
||||
return;
|
||||
|
||||
@@ -589,7 +589,7 @@ void NativeWindowViews::UpdateWindowAccentColor() {
|
||||
should_apply_accent = std::get<bool>(accent_color_);
|
||||
} else if (std::holds_alternative<std::monostate>(accent_color_)) {
|
||||
// If no explicit color was set, default to the system accent color.
|
||||
should_apply_accent = IsAccentColorOnTitleBarsEnabled();
|
||||
should_apply_accent = IsAccentColorOnTitleBarsEnabled() && active;
|
||||
}
|
||||
|
||||
// Use system accent color as fallback if no explicit color was set.
|
||||
|
||||
Reference in New Issue
Block a user