Skip to content

Commit 371f864

Browse files
committed
Fix WCO inset override and key repeat toggle in sidebar
- Skip macOS traffic-light inline style when Window Controls Overlay is active, allowing the env(titlebar-area-x)-based CSS value from .wco to take effect for proper alignment with native titlebar geometry. - Add event.repeat guard to the sidebar.toggle keydown handler to prevent rapid toggling when the shortcut key is held down.
1 parent 57cb362 commit 371f864

1 file changed

Lines changed: 20 additions & 3 deletions

File tree

apps/web/src/components/AppSidebarLayout.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useAtomValue } from "@effect/atom-react";
2-
import { useEffect, type CSSProperties, type ReactNode } from "react";
2+
import { useEffect, useState, type CSSProperties, type ReactNode } from "react";
33
import { useNavigate } from "@tanstack/react-router";
44

55
import { isElectron } from "../env";
@@ -22,7 +22,7 @@ function SidebarControl() {
2222

2323
useEffect(() => {
2424
const onKeyDown = (event: KeyboardEvent) => {
25-
if (event.defaultPrevented) return;
25+
if (event.defaultPrevented || event.repeat) return;
2626
if (resolveShortcutCommand(event, keybindings) !== "sidebar.toggle") return;
2727

2828
event.preventDefault();
@@ -48,8 +48,25 @@ function SidebarControl() {
4848

4949
export function AppSidebarLayout({ children }: { children: ReactNode }) {
5050
const navigate = useNavigate();
51+
52+
const [isWcoVisible, setIsWcoVisible] = useState(
53+
() =>
54+
(navigator as Navigator & { windowControlsOverlay?: { visible: boolean } })
55+
.windowControlsOverlay?.visible ?? false,
56+
);
57+
58+
useEffect(() => {
59+
const overlay = (
60+
navigator as Navigator & { windowControlsOverlay?: EventTarget & { visible: boolean } }
61+
).windowControlsOverlay;
62+
if (!overlay) return;
63+
const update = () => setIsWcoVisible(overlay.visible);
64+
overlay.addEventListener("geometrychange", update);
65+
return () => overlay.removeEventListener("geometrychange", update);
66+
}, []);
67+
5168
const macosWindowControlsStyle =
52-
isElectron && isMacPlatform(navigator.platform)
69+
isElectron && isMacPlatform(navigator.platform) && !isWcoVisible
5370
? ({ "--workspace-controls-left": MACOS_TRAFFIC_LIGHTS_LEFT_INSET } as CSSProperties)
5471
: undefined;
5572

0 commit comments

Comments
 (0)