diff --git a/src-tauri/src/commands/settings_window.rs b/src-tauri/src/commands/settings_window.rs index f307280..737a610 100644 --- a/src-tauri/src/commands/settings_window.rs +++ b/src-tauri/src/commands/settings_window.rs @@ -14,6 +14,12 @@ fn show_and_focus_window(win: &tauri::WebviewWindow) { &format!("Failed to show settings window: {}", err), ); } + if let Err(err) = win.unminimize() { + logger::log_error( + "WINDOW", + &format!("Failed to restore settings window: {}", err), + ); + } if let Err(err) = win.set_focus() { logger::log_error( "WINDOW", diff --git a/src/windows/widget/Widget.tsx b/src/windows/widget/Widget.tsx index 786fdc7..0b88e7a 100644 --- a/src/windows/widget/Widget.tsx +++ b/src/windows/widget/Widget.tsx @@ -116,6 +116,18 @@ import { const WIDGET_RECORD_BUTTON_LEFT = 10; const FILE_DROP_LEAVE_GRACE_MS = 260; const FILE_DROP_CLOSE_ANIMATION_MS = 160; + +function isWindowsPlatform(): boolean { + if (typeof navigator === "undefined") { + return false; + } + + return ( + navigator.platform.toLowerCase().startsWith("win") || + navigator.userAgent.toLowerCase().includes("windows") + ); +} + type WidgetFileDropState = "idle" | "drag-over" | "processing" | "success" | "error" | "closing"; type WidgetCallState = @@ -2390,7 +2402,9 @@ function IdlePill({ const [isHovered, setIsHovered] = useState(false); const [copySucceeded, setCopySucceeded] = useState(false); const canCopy = Boolean(latestCopyText); - const controlsVisible = isHovered; + const canStartRecordingFromWidget = !isWindowsPlatform(); + const controlsVisible = + isHovered && (canStartRecordingFromWidget || canCopy); useEffect(() => { let disposed = false; @@ -2480,51 +2494,53 @@ function IdlePill({ pointerEvents: "none", }} > - + onClick={(event) => { + event.stopPropagation(); + onToggleRecording(); + }} + style={{ + position: "absolute", + left: WIDGET_RECORD_BUTTON_LEFT, + top: "50%", + width: 12, + height: 12, + border: "none", + borderRadius: 999, + padding: 0, + background: "transparent", + display: "flex", + alignItems: "center", + justifyContent: "center", + opacity: controlsVisible ? 1 : 0, + transform: controlsVisible + ? "translateY(-50%) scale(1)" + : "translateY(-50%) scale(0.84)", + transition: "opacity 0.14s ease, transform 0.14s ease", + pointerEvents: controlsVisible ? "auto" : "none", + cursor: "pointer", + WebkitFontSmoothing: "antialiased", + }} + > +