From 50787ac88e571d99b80c30213ae49674c1b7e706 Mon Sep 17 00:00:00 2001 From: Tyrone Dougherty Date: Fri, 19 Jun 2026 15:45:09 -0400 Subject: [PATCH 1/2] fix: allow clicks to pass through recording control overlay MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The HUD overlay window blocked all clicks in an 860×160 rectangle during recording. Two issues contributed: 1. The pointer-events-auto hit area was on a static wrapper div rather than the transformed element that moves with the dragged controls, so the interactive region never followed the bar. 2. The main process forced the window into compact non-passthrough bounds during recording, disabling the forwarding mechanism that allows clicks to reach apps beneath transparent areas. Move pointer-events-auto and mouse handlers onto the hudBarTransformRef div so the hit area tracks the controls. Keep the window at full work-area bounds during recording on platforms with passthrough support, letting the renderer's hover detection toggle click interception only when the cursor is directly over the control bar. Closes #687 Co-Authored-By: Claude Opus 4.6 (1M context) --- electron/windows.ts | 25 +++++++------------------ src/components/launch/LaunchWindow.tsx | 7 ++++--- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/electron/windows.ts b/electron/windows.ts index 478584b55..17a67b7b0 100644 --- a/electron/windows.ts +++ b/electron/windows.ts @@ -192,7 +192,7 @@ function getHudOverlayBounds() { const { workArea } = getHudOverlayDisplay(); return getHudOverlayWindowBounds( workArea, - isHudOverlayMousePassthroughSupported() && !hudOverlayRecordingActive, + isHudOverlayMousePassthroughSupported(), hudOverlayFallbackExpanded, ); } @@ -278,11 +278,7 @@ function setHudOverlayFallbackExpanded(expanded: boolean) { function setHudOverlayMousePassthrough(ignore: boolean) { hudOverlayIgnoringMouse = - hudOverlaySourceSelectionActive && !hudOverlayRecordingActive - ? true - : hudOverlayRecordingActive - ? false - : ignore; + hudOverlaySourceSelectionActive && !hudOverlayRecordingActive ? true : ignore; if (hudOverlayMouseReassertTimer) { clearTimeout(hudOverlayMouseReassertTimer); @@ -293,9 +289,7 @@ function setHudOverlayMousePassthrough(ignore: boolean) { return; } - if (hudOverlayRecordingActive) { - hudOverlayFallbackExpanded = false; - applyHudOverlayBounds(); + if (hudOverlayRecordingActive && !isHudOverlayMousePassthroughSupported()) { hudOverlayWindow.setIgnoreMouseEvents(false); return; } @@ -480,13 +474,8 @@ export function createHudOverlayWindow(): BrowserWindow { } if (isHudOverlayMousePassthroughSupported()) { - if (hudOverlayRecordingActive) { - hudOverlayIgnoringMouse = false; - win.setIgnoreMouseEvents(false); - } else { - hudOverlayIgnoringMouse = true; - win.setIgnoreMouseEvents(true, { forward: true }); - } + hudOverlayIgnoringMouse = true; + win.setIgnoreMouseEvents(true, { forward: true }); } // On Windows 11+, focus changes (e.g. showing a native notification) can break @@ -616,7 +605,7 @@ export function reassertHudOverlayMousePassthrough(): void { } if (hudOverlayRecordingActive) { - hud.setIgnoreMouseEvents(false); + hud.setIgnoreMouseEvents(true, { forward: true }); return; } @@ -638,7 +627,7 @@ export function setHudOverlayRecordingActive(recording: boolean): void { hudOverlayRecordingActive = Boolean(recording); hudOverlayFallbackExpanded = false; applyHudOverlayBounds(); - setHudOverlayMousePassthrough(!hudOverlayRecordingActive); + setHudOverlayMousePassthrough(hudOverlayIgnoringMouse); } export function createUpdateToastWindow(): BrowserWindow { diff --git a/src/components/launch/LaunchWindow.tsx b/src/components/launch/LaunchWindow.tsx index d7dc51bc4..d5fb50856 100644 --- a/src/components/launch/LaunchWindow.tsx +++ b/src/components/launch/LaunchWindow.tsx @@ -442,12 +442,13 @@ function LaunchWindowContent() { className="flex items-center overflow-visible flex-col-reverse pointer-events-none" >
Date: Fri, 19 Jun 2026 16:10:56 -0400 Subject: [PATCH 2/2] fix: reapply stored mouse state in reassertHudOverlayMousePassthrough Instead of forcing setIgnoreMouseEvents(true, { forward: true }) during recording, reapply the stored hudOverlayIgnoringMouse state so the main process stays in sync with the renderer's hover state. Co-Authored-By: Claude Opus 4.6 (1M context) --- electron/windows.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron/windows.ts b/electron/windows.ts index 17a67b7b0..b327ee989 100644 --- a/electron/windows.ts +++ b/electron/windows.ts @@ -605,7 +605,7 @@ export function reassertHudOverlayMousePassthrough(): void { } if (hudOverlayRecordingActive) { - hud.setIgnoreMouseEvents(true, { forward: true }); + setHudOverlayMousePassthrough(hudOverlayIgnoringMouse); return; }