Release Notes v0.2.2
Critical Fixes
- Fixed a memory leak in
FocusMonitorcaused by an extra COMAddRef()call during handler registration. - Replaced
volatile bool g_runningwithstd::atomic<bool>to ensure thread-safe shutdown signaling. - Fixed IME state tracking so failed switch attempts no longer prevent future retries.
- Made configuration loading atomic to prevent partial updates when JSON parsing fails.
Improvements
- Reduced mutex hold time in focus callbacks to avoid event backlog and potential deadlocks.
- Fixed data races in
ImeSwitcherby protecting shared state with a mutex. - Replaced
SendMessagewithSendMessageTimeout(..., SMTO_ABORTIFHUNG)to prevent hangs on unresponsive windows. - Fixed JSON parsing when braces appear inside quoted strings.
- Improved IME state detection when the IME is closed by marking unreliable states correctly.
Minor Fixes
- Improved
HWNDformatting by usinguintptr_tfor safe pointer conversion. - Prevented queued focus events from executing after
FocusMonitorhas stopped. - Updated version number references from
0.1.4to0.2.1. - Fixed configuration loading on non-ASCII installation paths by using
GetModuleFileNameW().
Summary
This release improves stability, thread safety, IME switching reliability, configuration handling, and overall robustness.