From 84df96eaefe7a920b48b205501fc849ba027e9ad Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Fri, 13 Mar 2026 09:18:27 +0800 Subject: desktop: multi-window support in electron (#17155) --- packages/desktop-electron/src/renderer/index.tsx | 26 ++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'packages/desktop-electron/src/renderer') diff --git a/packages/desktop-electron/src/renderer/index.tsx b/packages/desktop-electron/src/renderer/index.tsx index e313d5594..6719c04be 100644 --- a/packages/desktop-electron/src/renderer/index.tsx +++ b/packages/desktop-electron/src/renderer/index.tsx @@ -10,14 +10,15 @@ import { useCommand, } from "@opencode-ai/app" import type { AsyncStorage } from "@solid-primitives/storage" -import { createResource, onCleanup, onMount, Show } from "solid-js" -import { render } from "solid-js/web" import { MemoryRouter } from "@solidjs/router" +import { createEffect, createResource, onCleanup, onMount, Show } from "solid-js" +import { render } from "solid-js/web" import pkg from "../../package.json" import { initI18n, t } from "./i18n" import { UPDATER_ENABLED } from "./updater" import { webviewZoom } from "./webview-zoom" import "./styles.css" +import { useTheme } from "@opencode-ai/ui/theme" const root = document.getElementById("root") if (import.meta.env.DEV && !(root instanceof HTMLElement)) { @@ -226,7 +227,9 @@ const createPlatform = (): Platform => { const image = await window.api.readClipboardImage().catch(() => null) if (!image) return null const blob = new Blob([image.buffer], { type: "image/png" }) - return new File([blob], `pasted-image-${Date.now()}.png`, { type: "image/png" }) + return new File([blob], `pasted-image-${Date.now()}.png`, { + type: "image/png", + }) }, } } @@ -240,6 +243,8 @@ listenForDeepLinks() render(() => { const platform = createPlatform() + const [windowCount] = createResource(() => window.api.getWindowCount()) + // Fetch sidecar credentials (available immediately, before health check) const [sidecar] = createResource(() => window.api.awaitInitialization(() => undefined)) @@ -276,6 +281,18 @@ render(() => { function Inner() { const cmd = useCommand() menuTrigger = (id) => cmd.trigger(id) + + const theme = useTheme() + + createEffect(() => { + theme.themeId() + theme.mode() + const bg = getComputedStyle(document.documentElement).getPropertyValue("--background-base").trim() + if (bg) { + void window.api.setBackgroundColor(bg) + } + }) + return null } @@ -289,13 +306,14 @@ render(() => { return ( - + {(_) => { return ( 1} > -- cgit v1.2.3