Multi-monitor positioning, window position persistence, and clipboard
robustness improvements.
- Windows: fix multi-monitor positioning. The window now opens on the
monitor where the cursor lives, regardless of per-monitor DPI mix
(e.g. 4K@150% + 1080p@100%). Two underlying issues are addressed:
(a) bypasswindow_managerplugin's double-DPR scaling in setPosition
via direct Win32SetWindowPos/FindWindowW/GetWindowRect,
(b) fix latent FFI typedef bug forMonitorFromPointwhosePOINT
argument was being passed as two Int32s, breaking the x64 ABI and
silently making cursor monitor detection always fall back to the
primary work area. - Window position persistence: new "Remember window position" toggle in
Settings → Behavior (default OFF). When enabled, the window reopens at
the last position used, including across hide/show, settings entry/exit,
and gate mode. Saved coordinates are validated against current visible
monitors before restoration; out-of-range or off-screen values fall back
to cursor positioning. macOS/Linux include a 50ms post-set verification
with auto-recovery. - Clipboard image handling: BITMAPV5 support added so wider/taller images
copied from modern apps are no longer dropped or corrupted (#43). - Concurrency: config writes are now serialized through a single chained
future, eliminating last-writer-wins races between window-position
persistence and other settings (e.g. onboarding flags, accessibility). - Robustness: race fix in
hide()(visibility flag flipped before async
position read),FindWindowWscoped to the Flutter window class to
avoid matching foreign processes named "CopyPaste", sane-range guard
on saved coordinates rejects NaN, infinities and Windows minimized
sentinels (-32000), and "Reset to Defaults" now clears the persisted
coordinates. - Build: drop
sqlite3andsqlite3_flutter_libs(#45) and prune them
from iOS Podfile.lock; lower image build footprint and dependency
surface on macOS/iOS. - Tests: 16 new cases covering the three new
AppConfigfields
(defaults, JSON round-trip, copyWith sentinel for nullable, save/load),
plus 12 new cases for cross-platform sane-range validation.
Severity: recommended
Min-Supported: 2.3.0
What's Changed
- fix: enhance image processing for clipboard handling with BITMAPV5 su… by @rgdevment in #43
- chore: update dependencies and remove sqlite3_flutter_libs plugin by @rgdevment in #45
- feat: add window position persistence feature with settings toggle by @rgdevment in #46
Full Changelog: v2.4.1...v2.5.0