The app hides itself from the taskbar and the macOS Dock all the time, not just when stealth mode is on:
skipTaskbar: true on the window, re-asserted by hideFromTaskbar() on every show/restore/reshape
LSUIElement in the packaged Info.plist plus app.setActivationPolicy('accessory') for dev runs, so there is no Dock icon and no Cmd+Tab entry
Stealth mode is the feature that needs those surfaces gone - it is what hides the window from screen capture, and a labelled taskbar button is the first thing a screen share gives the app away with. Outside stealth mode there is nothing to hide from, and the cost is paid by everyone: minimize the window in normal mode and there is no button to click to get it back.
That missing button is the only reason Ctrl+Shift+F8 (Ctrl+Opt+F8 on macOS) exists. It is a system-wide shortcut burnt on working around a self-inflicted problem, and it is the kind of thing users have to be told about because nothing on screen suggests it.
What should happen
- Normal mode: ordinary taskbar button on Windows, ordinary Dock icon and Cmd+Tab entry on macOS.
- Stealth mode: both gone, as today.
- Remove the
Ctrl+Shift+F8 restore shortcut entirely. Relaunching the app stays the recovery path for a window minimized in stealth mode - the single instance lock already routes to restoreWindow().
The desktop shortcut stays suppressed in both modes; that one is set at install time and has nothing to track.
Things that will bite
The taskbar button is registration state, not a window style. ITaskbarList::DeleteTab on Windows. It does not survive setFocusable or z-order changes, which is exactly what toggling stealth does, so it has to be re-asserted after every transition and on the window events that re-register it (show, restore, maximize, unmaximize). This has already caused one reported bug - the button came back after switching out of stealth.
LSUIElement cannot stay. It pins the packaged app to accessory from launch, so there would be no Dock icon to give back. The activation policy has to be switched at runtime instead.
macOS drops Dock calls made within one second of the previous one, silently (dock.hide() docs). Toggling stealth twice quickly - mashing the hotkey - would leave the Dock icon on screen for the rest of the session with nothing logged. Needs a re-assert once the window has passed.
Whichever way this lands, it needs checking across repeated toggles, not one pass in each direction. Every failure mode here is silent.
The app hides itself from the taskbar and the macOS Dock all the time, not just when stealth mode is on:
skipTaskbar: trueon the window, re-asserted byhideFromTaskbar()on every show/restore/reshapeLSUIElementin the packaged Info.plist plusapp.setActivationPolicy('accessory')for dev runs, so there is no Dock icon and no Cmd+Tab entryStealth mode is the feature that needs those surfaces gone - it is what hides the window from screen capture, and a labelled taskbar button is the first thing a screen share gives the app away with. Outside stealth mode there is nothing to hide from, and the cost is paid by everyone: minimize the window in normal mode and there is no button to click to get it back.
That missing button is the only reason
Ctrl+Shift+F8(Ctrl+Opt+F8on macOS) exists. It is a system-wide shortcut burnt on working around a self-inflicted problem, and it is the kind of thing users have to be told about because nothing on screen suggests it.What should happen
Ctrl+Shift+F8restore shortcut entirely. Relaunching the app stays the recovery path for a window minimized in stealth mode - the single instance lock already routes torestoreWindow().The desktop shortcut stays suppressed in both modes; that one is set at install time and has nothing to track.
Things that will bite
The taskbar button is registration state, not a window style.
ITaskbarList::DeleteTabon Windows. It does not survivesetFocusableor z-order changes, which is exactly what toggling stealth does, so it has to be re-asserted after every transition and on the window events that re-register it (show,restore,maximize,unmaximize). This has already caused one reported bug - the button came back after switching out of stealth.LSUIElementcannot stay. It pins the packaged app to accessory from launch, so there would be no Dock icon to give back. The activation policy has to be switched at runtime instead.macOS drops Dock calls made within one second of the previous one, silently (
dock.hide()docs). Toggling stealth twice quickly - mashing the hotkey - would leave the Dock icon on screen for the rest of the session with nothing logged. Needs a re-assert once the window has passed.Whichever way this lands, it needs checking across repeated toggles, not one pass in each direction. Every failure mode here is silent.