Skip to content

feat: add dictation panel visibility modes#123

Open
epicexcelsior wants to merge 2 commits intoOpenWhispr:mainfrom
epicexcelsior:feature/dictation-panel-auto-hide
Open

feat: add dictation panel visibility modes#123
epicexcelsior wants to merge 2 commits intoOpenWhispr:mainfrom
epicexcelsior:feature/dictation-panel-auto-hide

Conversation

@epicexcelsior
Copy link
Contributor

@epicexcelsior epicexcelsior commented Jan 20, 2026

Summary

Adds configurable visibility modes for the dictation panel, allowing users to control when the panel is visible.

Features

Three Visibility Modes

  • Always Visible (default) - Panel always shown on screen.
  • When Transcribing - Panel appears when recording starts and hides after transcription completes. This is similar to SuperWhisper's default dictation panel behavior.
  • Always Hidden - Panel never shows; dictation works entirely in the background.

Settings Access

Users can change the visibility mode from three places:

  • Settings → General → Dictation Panel dropdown
  • Dictation Panel Quick Menu (right-click the panel icon)
  • System Tray → Panel Visibility submenu

All three locations sync instantly via IPC broadcast.

Technical Implementation

  • IPC Sync: When any window changes the setting, it broadcasts to all windows for instant sync
  • Performance: Cached visibility mode in WindowManager for fast hotkey response
  • Hidden Mode Protection: showDictationPanel() and hotkey handlers check visibility mode before showing, preventing any flash

Files Changed

File Change
preload.js Added sync API
src/App.jsx Visibility effect and IPC listener
src/components/SettingsPage.tsx Dropdown in General settings
src/helpers/ipcHandlers.js sync-panel-visibility-mode handler
src/helpers/tray.js Panel Visibility submenu
src/helpers/windowManager.js Mode checks and caching
src/hooks/useSettings.ts PanelVisibilityMode type and setting
README.md Documentation update

Testing

  • Settings dropdown syncs with tray and quick menu
  • Tray submenu syncs with settings and quick menu
  • Quick menu syncs with settings and tray
  • "Always Visible" mode keeps panel visible
  • "When Transcribing" mode shows panel on record, hides after
  • "Always Hidden" mode never shows panel (no flash)
  • Settings persist across app restarts

Control Panel

image

Tray Menu Settings

image

Adds configurable visibility modes for the dictation panel:
- Always Visible (default): Panel always shown
- When Transcribing: Panel shows during recording, hides after
- Always Hidden: Panel never shows, dictation works in background

Settings accessible from:
- Settings > General > Dictation Panel dropdown
- Dictation panel quick menu (right-click)
- System tray > Panel Visibility submenu

Technical implementation:
- IPC sync for instant cross-window updates
- Cached visibility mode for fast hotkey response
- Mode check in hotkey handlers to prevent flash

Files changed:
- preload.js: Added sync API
- src/App.jsx: Visibility effect and IPC listener
- src/components/SettingsPage.tsx: Dropdown in General settings
- src/helpers/ipcHandlers.js: sync-panel-visibility-mode handler
- src/helpers/tray.js: Panel Visibility submenu
- src/helpers/windowManager.js: Mode checks and caching
- src/hooks/useSettings.ts: PanelVisibilityMode type and setting
epicexcelsior added a commit to epicexcelsior/open-whispr that referenced this pull request Jan 20, 2026
Adds a 'Hide from Taskbar' toggle (Windows-only) to the Dictation Panel section.
When enabled, the dictation panel only appears in the system tray.

This PR is designed to work alongside PR OpenWhispr#123 (panel visibility modes).
epicexcelsior added a commit to epicexcelsior/open-whispr that referenced this pull request Jan 20, 2026
Adds a 'Hide from Taskbar' toggle (Windows-only) to the Dictation Panel section.
When enabled, the dictation panel only appears in the system tray.

This PR is designed to work alongside PR OpenWhispr#123 (panel visibility modes).
@RyanTippsTX
Copy link

thank you for opening this PR, i was considering making this feature as well, hoping it gets merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants