@@ -8,6 +8,7 @@ import { CommandPalette } from "../components/CommandPalette";
88import { ScreenshotTool , ScreenshotButton } from "../components/ScreenshotTool" ;
99import { WorktreeCleanupDialog } from "../components/WorktreeCleanupDialog" ;
1010import { useHandleNewThread } from "../hooks/useHandleNewThread" ;
11+ import { readDesktopBridge } from "../lib/runtimeBridge" ;
1112import { isTerminalFocused } from "../lib/terminalFocus" ;
1213import { isMacPlatform } from "../lib/utils" ;
1314import { serverConfigQueryOptions } from "../lib/serverReactQuery" ;
@@ -19,7 +20,7 @@ import { useScreenshotStore } from "../screenshotStore";
1920import { useStore } from "../store" ;
2021import { resolveSidebarNewThreadEnvMode } from "~/components/Sidebar.logic" ;
2122import { useAppSettings } from "~/appSettings" ;
22- import { Sidebar , SidebarProvider , SidebarRail } from "~/components/ui/sidebar" ;
23+ import { Sidebar , SidebarProvider , SidebarRail , useSidebar } from "~/components/ui/sidebar" ;
2324import { useAutoDeleteMergedThreads } from "~/hooks/useAutoDeleteMergedThreads" ;
2425import { useClientMode } from "~/hooks/useClientMode" ;
2526import { isMobileShell } from "../env" ;
@@ -215,6 +216,40 @@ function ChatRouteGlobalShortcuts() {
215216 return null ;
216217}
217218
219+ function ChatDesktopWindowButtonsSync ( ) {
220+ const { open } = useSidebar ( ) ;
221+
222+ useEffect ( ( ) => {
223+ if ( typeof navigator === "undefined" || ! isMacPlatform ( navigator . platform ) ) {
224+ return ;
225+ }
226+
227+ const bridge = readDesktopBridge ( ) ;
228+ if ( ! bridge || typeof bridge . setWindowButtonVisibility !== "function" ) {
229+ return ;
230+ }
231+
232+ void bridge . setWindowButtonVisibility ( open ) ;
233+ } , [ open ] ) ;
234+
235+ useEffect ( ( ) => {
236+ if ( typeof navigator === "undefined" || ! isMacPlatform ( navigator . platform ) ) {
237+ return ;
238+ }
239+
240+ const bridge = readDesktopBridge ( ) ;
241+ if ( ! bridge || typeof bridge . setWindowButtonVisibility !== "function" ) {
242+ return ;
243+ }
244+
245+ return ( ) => {
246+ void bridge . setWindowButtonVisibility ( true ) ;
247+ } ;
248+ } , [ ] ) ;
249+
250+ return null ;
251+ }
252+
218253function ChatRouteLayout ( ) {
219254 const navigate = useNavigate ( ) ;
220255 const { settings } = useAppSettings ( ) ;
@@ -266,6 +301,7 @@ function ChatRouteLayout() {
266301 />
267302 < div className = "relative z-10 min-h-dvh" >
268303 < SidebarProvider defaultOpen = { clientMode !== "mobile" } >
304+ < ChatDesktopWindowButtonsSync />
269305 < ChatRouteGlobalShortcuts />
270306 < CommandPalette />
271307 < WorktreeCleanupDialog />
0 commit comments