Reframe v1.3.0
What's new in v1.3.0
Window-position persistence, rebuilt
Remember-and-restore now actually survives the real world:
- Windows are identified by process + window class, not by handle — an app that restarts (a browser update, a crash, a reboot) is re-claimed and moved back to its remembered place instead of being forgotten.
- Layouts persist to disk (
%LOCALAPPDATA%\Reframe\window-layouts.json, atomic writes, corruption-tolerant) and survive reboots. - Each display scale factor keeps its own layout. Changing Windows scaling (say 150% → 175%) leaves the physical resolution unchanged, so it used to silently corrupt the remembered layout; scale is now part of the layout key, and switching back finds the old layout intact.
- A window is only moved when Reframe can tell which window it is. Multi-window Electron apps (QQ, and friends) share one window class for every window; pairing them by guesswork used to reshape a chat window into the main panel's rect. Restores are now gated on confident identification (a unique caption, or an unambiguous 1:1) — when in doubt, Reframe records where a window is instead of guessing where it belongs.
- Post-wake scrambling grace extended so a monitor waking up slowly can't overwrite a freshly restored layout.
Fullscreen handling
- Exclusive-fullscreen games have no manipulable window; Reframe now detects that state and tells you to switch the game to windowed/borderless instead of failing silently. Borderless-fullscreen windows are taken over normally.
Fixes
- Start-on-login task no longer kills the app after 3 days. Tasks created by
schtasksinherit a default 3-day execution limit that the command line cannot disable; the task is now registered via XML with no limit, and existing installs self-heal on the next launch. - WER crash dumps are now actually registered (previously written to a hive WER never reads).
- Crash log now brackets every session and records exit/toggle provenance, so a vanished process is diagnosable after the fact.
356 tests green.
Full changelog: v1.2.0...v1.3.0