Tray icon:
- Replaced SVG DataURL approach (broken on Windows) with
nativeImage.createFromBuffer() using raw RGBA pixel data
- Draws rounded background + play triangle + red dot pixel-by-pixel
- Falls back to pre-generated tray-icon.png if present (build output)
- makeWindowIcon() also loads from assets/icon.png when available
Exit confirmation:
- confirmAndQuit() always shows dialog — previously only asked
when activeCount > 0, so quit with no streams skipped the dialog
- Dialog shows active stream count in detail text
- Tray menu relabeled in Russian with emoji markers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Root cause: PowerShell command was wrapped in exec() with double-quote
escaping that silently failed. Rewrote using execFile() with args array
which requires no manual escaping.
Changes:
- electron/devices.js: use execFile('powershell.exe', [...args]) for
window enumeration — eliminates quoting issues entirely
- Window list now returned INSIDE getDevices() video array (type='window')
so they arrive together with cameras/screens in one IPC call
- StreamSettings: windows grouped from devices.video directly, with 🪟
emoji prefix for visual distinction
- Added inline "↻ Обновить" button in video source field header to
refresh devices+windows on demand without switching tabs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>