diff --git a/packages/app/public/index.html b/packages/app/public/index.html
index 12161df30..688fb0609 100644
--- a/packages/app/public/index.html
+++ b/packages/app/public/index.html
@@ -19,6 +19,12 @@
body {
overflow: hidden;
}
+ /* Prevent white flash before React mounts */
+ @media (prefers-color-scheme: dark) {
+ html, body {
+ background-color: #181B1A;
+ }
+ }
/* These styles make the root element full-height */
#root {
display: flex;
diff --git a/packages/desktop/src/main.ts b/packages/desktop/src/main.ts
index f368c696c..e2dce43f4 100644
--- a/packages/desktop/src/main.ts
+++ b/packages/desktop/src/main.ts
@@ -14,6 +14,7 @@ import { closeAllTransportSessions } from "./daemon/local-transport.js";
import {
registerWindowManager,
getMainWindowChromeOptions,
+ getWindowBackgroundColor,
resolveSystemWindowTheme,
setupWindowResizeEvents,
setupDragDropPrevention,
@@ -93,6 +94,7 @@ async function createMainWindow(): Promise {
width: 1200,
height: 800,
show: false,
+ backgroundColor: getWindowBackgroundColor(systemTheme),
...(iconPath ? { icon: iconPath } : {}),
...getMainWindowChromeOptions({
platform: process.platform,
diff --git a/packages/desktop/src/window/window-manager.ts b/packages/desktop/src/window/window-manager.ts
index f7dee555c..ec02e8968 100644
--- a/packages/desktop/src/window/window-manager.ts
+++ b/packages/desktop/src/window/window-manager.ts
@@ -33,6 +33,10 @@ export function resolveSystemWindowTheme(): WindowTheme {
return nativeTheme.shouldUseDarkColors ? "dark" : "light";
}
+export function getWindowBackgroundColor(theme: WindowTheme): string {
+ return theme === "dark" ? "#181B1A" : "#ffffff";
+}
+
export function createWindowControlsOverlayState(theme: WindowTheme): WindowControlsOverlayState {
const overlay = getTitleBarOverlayOptions(theme);
return {
@@ -44,7 +48,7 @@ export function createWindowControlsOverlayState(theme: WindowTheme): WindowCont
export function getTitleBarOverlayOptions(theme: WindowTheme): Electron.TitleBarOverlayOptions {
if (theme === "dark") {
- return { color: "#18181c", symbolColor: "#e4e4e7", height: 29 };
+ return { color: "#181B1A", symbolColor: "#e4e4e7", height: 29 };
}
return { color: "#ffffff", symbolColor: "#09090b", height: 29 };
@@ -171,7 +175,7 @@ export function registerWindowManager(): void {
ipcMain.handle("paseo:window:updateWindowControls", (event, update?: unknown) => {
const win = BrowserWindow.fromWebContents(event.sender);
- if (!win || process.platform === "darwin") {
+ if (!win) {
return;
}
@@ -180,6 +184,14 @@ export function registerWindowManager(): void {
return;
}
+ if (nextUpdate.backgroundColor) {
+ win.setBackgroundColor(nextUpdate.backgroundColor);
+ }
+
+ if (process.platform === "darwin") {
+ return;
+ }
+
const current =
overlayStateByWindow.get(win) ?? createWindowControlsOverlayState(resolveSystemWindowTheme());
const nextState = applyWindowControlsOverlayUpdate({