From 822fb2cd4dfcf6bbeeae11667570c837aba6ded8 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 25 Nov 2025 22:47:09 +0100 Subject: [PATCH] fix: `systemPreferences.getAccentColor` inverted color (#49066) --- .../browser/api/electron_api_system_preferences_win.cc | 3 ++- spec/api-browser-window-spec.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/electron_api_system_preferences_win.cc b/shell/browser/api/electron_api_system_preferences_win.cc index d03f0f0c3e..74f1a5b65f 100644 --- a/shell/browser/api/electron_api_system_preferences_win.cc +++ b/shell/browser/api/electron_api_system_preferences_win.cc @@ -16,6 +16,7 @@ #include "base/win/wrapped_window_proc.h" #include "shell/common/color_util.h" #include "shell/common/process_util.h" +#include "skia/ext/skia_utils_win.h" #include "ui/gfx/color_utils.h" #include "ui/gfx/win/hwnd_util.h" @@ -88,7 +89,7 @@ std::string SystemPreferences::GetAccentColor() { if (!color.has_value()) return ""; - return hexColorDWORDToRGBA(color.value()); + return ToRGBAHex(skia::COLORREFToSkColor(color.value()), false); } std::string SystemPreferences::GetColor(gin_helper::ErrorThrower thrower, diff --git a/spec/api-browser-window-spec.ts b/spec/api-browser-window-spec.ts index 4953aa4a76..3e8c384f74 100755 --- a/spec/api-browser-window-spec.ts +++ b/spec/api-browser-window-spec.ts @@ -1,4 +1,4 @@ -import { app, BrowserWindow, BrowserView, dialog, ipcMain, OnBeforeSendHeadersListenerDetails, net, protocol, screen, webContents, webFrameMain, session, WebContents, WebFrameMain } from 'electron/main'; +import { app, BrowserWindow, BrowserView, dialog, ipcMain, OnBeforeSendHeadersListenerDetails, net, protocol, screen, webContents, webFrameMain, session, systemPreferences, WebContents, WebFrameMain } from 'electron/main'; import { expect } from 'chai'; @@ -2606,6 +2606,14 @@ describe('BrowserWindow module', () => { expect(accentColor).to.match(/^#[0-9A-F]{6}$/i); }); + it('matches the systemPreferences system color when true', () => { + const w = new BrowserWindow({ show: false }); + w.setAccentColor(true); + const accentColor = w.getAccentColor() as string; + const systemColor = systemPreferences.getAccentColor().slice(0, 6); + expect(accentColor).to.equal(`#${systemColor}`); + }); + it('returns the correct accent color after multiple changes', () => { const w = new BrowserWindow({ show: false });