From 0d8e769848239c5c1b606f5ebfcd3f9fa5a5da2e Mon Sep 17 00:00:00 2001 From: shahor Date: Wed, 21 Jan 2026 10:54:01 +0100 Subject: [PATCH] feat: add preference to show/hide widget while recording Adds a new "Show widget while active" toggle in preferences that allows users to control whether the recording widget is visible during active recording sessions. Previously the widget was always shown when recording. The changes add: - New showWidgetWhileActive preference with UI toggle - Logic in app-manager.ts to conditionally show/hide widget based on recording state - Schema, settings service, and tRPC updates to support the new setting --- apps/desktop/src/db/app-settings.ts | 1 + apps/desktop/src/db/schema.ts | 1 + apps/desktop/src/main/core/app-manager.ts | 10 +++++-- .../main/pages/settings/preferences/index.tsx | 27 +++++++++++++++++++ apps/desktop/src/services/settings-service.ts | 4 +++ apps/desktop/src/trpc/routers/settings.ts | 1 + 6 files changed, 42 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/db/app-settings.ts b/apps/desktop/src/db/app-settings.ts index f14c2ad8..ab379de3 100644 --- a/apps/desktop/src/db/app-settings.ts +++ b/apps/desktop/src/db/app-settings.ts @@ -140,6 +140,7 @@ const defaultSettings: AppSettingsData = { preferences: { launchAtLogin: true, showWidgetWhileInactive: true, + showWidgetWhileActive: true, showInDock: true, }, transcription: { diff --git a/apps/desktop/src/db/schema.ts b/apps/desktop/src/db/schema.ts index 6f97e201..7f863ec2 100644 --- a/apps/desktop/src/db/schema.ts +++ b/apps/desktop/src/db/schema.ts @@ -158,6 +158,7 @@ export interface AppSettingsData { launchAtLogin?: boolean; minimizeToTray?: boolean; showWidgetWhileInactive?: boolean; + showWidgetWhileActive?: boolean; showInDock?: boolean; }; telemetry?: { diff --git a/apps/desktop/src/main/core/app-manager.ts b/apps/desktop/src/main/core/app-manager.ts index c9e179a8..77df2ae4 100644 --- a/apps/desktop/src/main/core/app-manager.ts +++ b/apps/desktop/src/main/core/app-manager.ts @@ -188,12 +188,14 @@ export class AppManager { "preferences-changed", async ({ showWidgetWhileInactiveChanged, + showWidgetWhileActiveChanged, showInDockChanged, }: { showWidgetWhileInactiveChanged: boolean; + showWidgetWhileActiveChanged: boolean; showInDockChanged: boolean; }) => { - if (showWidgetWhileInactiveChanged) { + if (showWidgetWhileInactiveChanged || showWidgetWhileActiveChanged) { const recordingManager = this.serviceManager.getService("recordingManager"); const isIdle = recordingManager.getState() === "idle"; @@ -217,7 +219,11 @@ export class AppManager { const settingsService = this.serviceManager.getService("settingsService"); const preferences = await settingsService.getPreferences(); - if (preferences.showWidgetWhileInactive || !isIdle) { + const shouldShow = isIdle + ? preferences.showWidgetWhileInactive + : preferences.showWidgetWhileActive; + + if (shouldShow) { this.windowManager.showWidget(); } else { this.windowManager.hideWidget(); diff --git a/apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx b/apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx index 2d0dc387..d5371c17 100644 --- a/apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx +++ b/apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx @@ -34,6 +34,12 @@ export default function PreferencesSettingsPage() { }); }; + const handleShowWidgetWhileActiveChange = (checked: boolean) => { + updatePreferencesMutation.mutate({ + showWidgetWhileActive: checked, + }); + }; + const handleMinimizeToTrayChange = (checked: boolean) => { updatePreferencesMutation.mutate({ minimizeToTray: checked, @@ -48,6 +54,8 @@ export default function PreferencesSettingsPage() { const showWidgetWhileInactive = preferencesQuery.data?.showWidgetWhileInactive ?? true; + const showWidgetWhileActive = + preferencesQuery.data?.showWidgetWhileActive ?? true; const minimizeToTray = preferencesQuery.data?.minimizeToTray ?? false; const launchAtLogin = preferencesQuery.data?.launchAtLogin ?? true; const showInDock = preferencesQuery.data?.showInDock ?? true; @@ -123,6 +131,25 @@ export default function PreferencesSettingsPage() { + {/* Show Widget While Active Section */} +
+
+ +

+ Show the widget on screen when recording +

+
+ +
+ + + {/* Show in Dock Section (macOS only) */} {isMac && ( <> diff --git a/apps/desktop/src/services/settings-service.ts b/apps/desktop/src/services/settings-service.ts index 1d9cc803..5da6e557 100644 --- a/apps/desktop/src/services/settings-service.ts +++ b/apps/desktop/src/services/settings-service.ts @@ -21,6 +21,7 @@ export interface AppPreferences { launchAtLogin: boolean; minimizeToTray: boolean; showWidgetWhileInactive: boolean; + showWidgetWhileActive: boolean; showInDock: boolean; } @@ -289,6 +290,7 @@ export class SettingsService extends EventEmitter { launchAtLogin: preferences?.launchAtLogin ?? true, minimizeToTray: preferences?.minimizeToTray ?? true, showWidgetWhileInactive: preferences?.showWidgetWhileInactive ?? true, + showWidgetWhileActive: preferences?.showWidgetWhileActive ?? true, showInDock: preferences?.showInDock ?? true, }; } @@ -316,6 +318,8 @@ export class SettingsService extends EventEmitter { changes: preferences, showWidgetWhileInactiveChanged: preferences.showWidgetWhileInactive !== undefined, + showWidgetWhileActiveChanged: + preferences.showWidgetWhileActive !== undefined, showInDockChanged: preferences.showInDock !== undefined, }); } diff --git a/apps/desktop/src/trpc/routers/settings.ts b/apps/desktop/src/trpc/routers/settings.ts index ae7472d4..cf7392f7 100644 --- a/apps/desktop/src/trpc/routers/settings.ts +++ b/apps/desktop/src/trpc/routers/settings.ts @@ -43,6 +43,7 @@ const AppPreferencesSchema = z.object({ launchAtLogin: z.boolean().optional(), minimizeToTray: z.boolean().optional(), showWidgetWhileInactive: z.boolean().optional(), + showWidgetWhileActive: z.boolean().optional(), showInDock: z.boolean().optional(), });