v1.0.1
Bug-fix release: remote input, session window, and credential-storage
fixes, plus the project's first unit-test suite.
Remote input
- Modifier keys no longer get stuck down on the remote. Modifier state
is reconciled from each event's device flags (so one missed event can
no longer invert a key permanently), everything held is released when
the session window loses focus, and the keyUps AppKit swallows while
⌘ is held are flushed when ⌘ comes back up. - ⌘ and ⌃ shortcuts are sent to the remote desktop while controlling
it, instead of triggering local menu items — ⌘R now opens the remote
Run dialog rather than reconnecting the session.
Session windows
- Connecting to a PC that already has a session focuses its window
without re-maximizing it or churning the remote resolution. - After a server-side disconnect, clipboard sync and polling stop
talking to the dead connection and no longer show false success
toasts. - Closing a background session window no longer removes the Session
menu for the focused one, and menu items now enable, disable, and
title themselves from live session state. - Quitting with open sessions cancels them cleanly instead of dropping
the connections mid-stream.
Devices and credentials
- A corrupted or unreadable saved-PC list can no longer be wiped by the
next edit: writes fail with a visible error and leave the stored data
intact. - Keychain entries survive profile duplication and deletion when
another profile connects to the same machine, case-only host edits
keep addressing the same entry (existing items migrate
automatically), and passwords remembered from the in-session sign-in
now show up in the device editor. - Deleting a PC surfaces Keychain errors instead of silently ignoring
them, and clears the in-memory password cache. - Saving a PC while it is connecting no longer reverts its Recently
Used timestamp, and Add PC (⌘N) opens the Connection Center first
when its window is closed. - Keychain writes happen off the connection path, so a Keychain
approval prompt can no longer trigger a spurious connection timeout.
Testing
- New unit-test target covering remote input key state, the device
profile store, and keychain account normalization; CI runs the suite
on every push.