diff --git a/apps/desktop/src/db/app-settings.ts b/apps/desktop/src/db/app-settings.ts index 0441ffc..b00a667 100644 --- a/apps/desktop/src/db/app-settings.ts +++ b/apps/desktop/src/db/app-settings.ts @@ -49,6 +49,11 @@ const defaultSettings: AppSettingsData = { ui: { theme: "system", }, + preferences: { + launchAtLogin: true, + showWidgetWhileInactive: true, + showInDock: true, + }, transcription: { language: "en", autoTranscribe: true, diff --git a/apps/desktop/src/db/schema.ts b/apps/desktop/src/db/schema.ts index a1a3b21..f1664d6 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; + showInDock?: boolean; }; telemetry?: { enabled?: boolean; diff --git a/apps/desktop/src/main/core/app-manager.ts b/apps/desktop/src/main/core/app-manager.ts index cc456d3..c9e179a 100644 --- a/apps/desktop/src/main/core/app-manager.ts +++ b/apps/desktop/src/main/core/app-manager.ts @@ -183,13 +183,15 @@ export class AppManager { } private setupSettingsEventListeners(settingsService: SettingsService): void { - // Handle preference changes (widget visibility) + // Handle preference changes (widget visibility, dock visibility) settingsService.on( "preferences-changed", async ({ showWidgetWhileInactiveChanged, + showInDockChanged, }: { showWidgetWhileInactiveChanged: boolean; + showInDockChanged: boolean; }) => { if (showWidgetWhileInactiveChanged) { const recordingManager = @@ -197,6 +199,9 @@ export class AppManager { const isIdle = recordingManager.getState() === "idle"; await this.updateWidgetVisibility(isIdle); } + if (showInDockChanged) { + settingsService.syncDockVisibility(); + } }, ); @@ -231,17 +236,21 @@ export class AppManager { this.windowManager.createOrShowMainWindow(); + // Apply dock visibility based on user preference (macOS only) if (app.dock) { - app.dock - .show() - .then(() => { - logger.main.info("Explicitly showing app in dock"); - }) - .catch((error) => { - logger.main.error("Error showing app in dock", error); - }); - } else { - logger.main.warn("app.dock is not available"); + if (preferences.showInDock) { + app.dock + .show() + .then(() => { + logger.main.info("Showing app in dock based on preference"); + }) + .catch((error) => { + logger.main.error("Error showing app in dock", error); + }); + } else { + app.dock.hide(); + logger.main.info("Hiding app from dock based on preference"); + } } } 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 cd9d9c3..2d0dc38 100644 --- a/apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx +++ b/apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx @@ -40,10 +40,18 @@ export default function PreferencesSettingsPage() { }); }; + const handleShowInDockChange = (checked: boolean) => { + updatePreferencesMutation.mutate({ + showInDock: checked, + }); + }; + const showWidgetWhileInactive = preferencesQuery.data?.showWidgetWhileInactive ?? true; const minimizeToTray = preferencesQuery.data?.minimizeToTray ?? false; const launchAtLogin = preferencesQuery.data?.launchAtLogin ?? true; + const showInDock = preferencesQuery.data?.showInDock ?? true; + const isMac = window.electronAPI.platform === "darwin"; return (
+ Display the application icon in the macOS dock +
+