The screen capture service was selecting the first layer-0 window, which
during recording was VoiceInk's own status indicator overlay. This caused
OCR to always return 'No text detected' since the overlay has no readable
content.
Changes:
- Filter out windows owned by VoiceInk's process
- Prioritize windows belonging to NSWorkspace.frontmostApplication
- Refactor WindowCandidate struct to class scope
The screen capture service was selecting the first layer-0 window, which
during recording was VoiceInk's own status indicator overlay. This caused
OCR to always return 'No text detected' since the overlay has no readable
content.
Changes:
- Filter out windows owned by VoiceInk's process
- Prioritize windows belonging to NSWorkspace.frontmostApplication
- Filter out tiny windows (<120x120) to avoid tooltips/overlays
- Move CGWindowListCopyWindowInfo off main thread for better UI responsiveness
- Refactor WindowCandidate struct to class scope
This commit provides comprehensive documentation and source files for 5 critical quality of life improvements:
1. Recording duration indicator with real-time timer
2. Enhanced status display with visual feedback
3. Visible cancel button during recording
4. Keyboard shortcut cheat sheet (Cmd+?)
5. Structured logging system (AppLogger)
Included Files:
- Complete source files for new features
- Step-by-step application guide
- Detailed technical documentation
- Full analysis with 40+ improvement ideas
See APPLYING_QOL_IMPROVEMENTS.md for instructions on how to apply these improvements to the codebase.
All changes are backward compatible with no breaking changes.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Remove try! force operation that could crash on in-memory container failure
- Implement cascading fallback strategy with 3 initialization attempts:
1. Persistent storage (normal operation)
2. In-memory storage with user warning
3. Ultra-minimal default container
- Add containerInitializationFailed flag to track critical failures
- Extract container creation into static helper methods for better error handling
- Show user-friendly error dialog and graceful termination on total failure
- Only use preconditionFailure as absolute last resort after all attempts fail
Addresses AI code reviewer feedback about unsafe force operations.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>