From 0cf9a5d20b817596b04ad6c6b3290f9ca8b317ab Mon Sep 17 00:00:00 2001 From: Luke Parker <10430890+Hona@users.noreply.github.com> Date: Sat, 23 May 2026 14:42:40 +1000 Subject: [PATCH] fix(desktop): avoid white flash when restoring window (#28247) --- packages/desktop/src/main/windows.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/desktop/src/main/windows.ts b/packages/desktop/src/main/windows.ts index 4e6884f94d..b74b311f57 100644 --- a/packages/desktop/src/main/windows.ts +++ b/packages/desktop/src/main/windows.ts @@ -1,4 +1,7 @@ import windowState from "electron-window-state" +import { resolveThemeVariant } from "@opencode-ai/ui/theme/resolve" +import type { DesktopTheme } from "@opencode-ai/ui/theme/types" +import oc2ThemeJson from "../../../ui/src/theme/themes/oc-2.json" import { app, BrowserWindow, dialog, net, nativeImage, nativeTheme, protocol } from "electron" import { dirname, isAbsolute, join, relative, resolve } from "node:path" import { fileURLToPath, pathToFileURL } from "node:url" @@ -15,6 +18,11 @@ const rendererHost = "renderer" const clipboardWritePermission = "clipboard-sanitized-write" const notificationPermission = "notifications" const rendererPermissions = new Set([clipboardWritePermission, notificationPermission]) +const oc2Theme = oc2ThemeJson as DesktopTheme +const oc2Background = { + light: resolveThemeVariant(oc2Theme.light, false)["background-base"], + dark: resolveThemeVariant(oc2Theme.dark, true)["background-base"], +} const documentPolicyHeader = "Document-Policy" const jsCallStacksDocumentPolicy = "include-js-call-stacks-in-crash-reports" @@ -46,6 +54,7 @@ export function setRelaunchHandler(handler: () => void) { export function setBackgroundColor(color: string) { backgroundColor = color + BrowserWindow.getAllWindows().forEach((win) => win.setBackgroundColor(color)) } export function getBackgroundColor(): string | undefined { @@ -65,6 +74,10 @@ function tone() { return nativeTheme.shouldUseDarkColors ? "dark" : "light" } +function defaultBackgroundColor() { + return oc2Background[tone()] +} + function overlay(theme: Partial = {}, zoom = 1) { const mode = theme.mode ?? tone() return { @@ -120,7 +133,7 @@ export function createMainWindow() { autoHideMenuBar: true, title: "OpenCode", icon: iconPath(), - backgroundColor, + backgroundColor: backgroundColor ?? defaultBackgroundColor(), ...(process.platform === "darwin" ? { titleBarStyle: "hidden" as const, @@ -178,7 +191,7 @@ export function createLoadingWindow() { show: true, autoHideMenuBar: true, icon: iconPath(), - backgroundColor, + backgroundColor: backgroundColor ?? defaultBackgroundColor(), ...(process.platform === "darwin" ? { titleBarStyle: "hidden" as const } : {}), ...(process.platform === "win32" ? {