From 92ee514f5e1b4bfa9e87881007c0e3e6bae7c4da Mon Sep 17 00:00:00 2001 From: wiiiii123 Date: Tue, 21 Apr 2026 20:46:37 +0700 Subject: [PATCH 1/2] fix(recording): recover from fullscreen countdown failures --- electron/main.ts | 16 +++++++++++++++- electron/windows.ts | 7 ++++++- src/hooks/useScreenRecorder.ts | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/electron/main.ts b/electron/main.ts index 636c29ff5..cd93c1675 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -154,7 +154,21 @@ function restoreWindowSafely(window: BrowserWindow | null) { return; } - window.restore(); + if (!isEditorWindow(window) && process.platform === "win32") { + showHudOverlayFromTray(); + return; + } + + if (window.isMinimized()) { + window.restore(); + } + + if (!window.isVisible()) { + window.show(); + } + + window.moveTop(); + window.focus(); } // Tray Icons (lazily created after app is ready to avoid accessing Electron APIs too early) diff --git a/electron/windows.ts b/electron/windows.ts index 819c2b5c1..b3afc8056 100644 --- a/electron/windows.ts +++ b/electron/windows.ts @@ -904,7 +904,12 @@ export function createCountdownWindow(): BrowserWindow { win.webContents.on("did-finish-load", () => { if (!win.isDestroyed()) { - win.show(); + if (process.platform === "win32") { + win.showInactive(); + win.moveTop(); + } else { + win.show(); + } } }); diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index f95c65ad9..20c178dbf 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -1300,6 +1300,7 @@ export function useScreenRecorder(): UseScreenRecorderReturn { : "Failed to start recording", ); setRecording(false); + await window.electronAPI?.setRecordingState(false); cleanupCapturedMedia(); await stopWebcamRecorder(); } finally { From 1e102b354074e6c992fee71570aa32de892709ef Mon Sep 17 00:00:00 2001 From: wiiiii123 Date: Tue, 21 Apr 2026 21:05:36 +0700 Subject: [PATCH 2/2] fix(recording): always clean up failed starts --- src/hooks/useScreenRecorder.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index 20c178dbf..daf88c0f5 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -1300,9 +1300,14 @@ export function useScreenRecorder(): UseScreenRecorderReturn { : "Failed to start recording", ); setRecording(false); - await window.electronAPI?.setRecordingState(false); - cleanupCapturedMedia(); - await stopWebcamRecorder(); + try { + await window.electronAPI?.setRecordingState(false); + } catch (stateError) { + console.warn("Failed to reset main-process recording state:", stateError); + } finally { + cleanupCapturedMedia(); + await stopWebcamRecorder(); + } } finally { startInFlight.current = false; setStarting(false);