diff options
| author | Brendan Allan <[email protected]> | 2026-03-13 09:18:27 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-13 09:18:27 +0800 |
| commit | 84df96eaefe7a920b48b205501fc849ba027e9ad (patch) | |
| tree | 65ac52fde124e5cde48f56bba46c2d7fc1c2f070 /packages/desktop-electron/src/renderer | |
| parent | d9dd33aeebad49120ea8204e34520db872c9f553 (diff) | |
| download | opencode-84df96eaefe7a920b48b205501fc849ba027e9ad.tar.gz opencode-84df96eaefe7a920b48b205501fc849ba027e9ad.zip | |
desktop: multi-window support in electron (#17155)
Diffstat (limited to 'packages/desktop-electron/src/renderer')
| -rw-r--r-- | packages/desktop-electron/src/renderer/index.tsx | 26 |
1 files changed, 22 insertions, 4 deletions
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 ( <PlatformProvider value={platform}> <AppBaseProviders> - <Show when={!defaultServer.loading && !sidecar.loading}> + <Show when={!defaultServer.loading && !sidecar.loading && !windowCount.loading}> {(_) => { return ( <AppInterface defaultServer={defaultServer.latest ?? ServerConnection.Key.make("sidecar")} servers={servers()} router={MemoryRouter} + disableHealthCheck={(windowCount() ?? 0) > 1} > <Inner /> </AppInterface> |
