You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add workspace bookmarks that save the current local folder and current remote folder as a named pair, so a user can return to a matched local/remote location in one step.
Carried over from the Python-era PR #126, which was closed unmerged when the app moved to Rust. The design below is from that PR; the implementation has to be redone against the Rust crates.
Design from the original PR
Save the active local folder and active remote folder together under a user-supplied name.
An accessible Open Workspace dialog lists saved workspaces, keyboard-selectable, with a Remove button.
Bookmarks persist as non-secret data (workspaces.json) in the normal config directory, so they follow the data folder in portable mode.
Notes for the Rust implementation
Persistence belongs in portkeydrop-core alongside sites.rs / settings.rs, so it can be unit-tested without a display.
The dialog goes under crates/portkeydrop/src/ui/dialogs/. Every control needs an explicit accessible name via set_name, and the list needs a StaticText immediately before it so NVDA reads it as the list's name.
Opening a workspace changes the remote directory, which is network work and must go through a worker posting an AppEvent, not the UI thread.
Summary
Add workspace bookmarks that save the current local folder and current remote folder as a named pair, so a user can return to a matched local/remote location in one step.
Carried over from the Python-era PR #126, which was closed unmerged when the app moved to Rust. The design below is from that PR; the implementation has to be redone against the Rust crates.
Design from the original PR
workspaces.json) in the normal config directory, so they follow the data folder in portable mode.Notes for the Rust implementation
portkeydrop-corealongsidesites.rs/settings.rs, so it can be unit-tested without a display.crates/portkeydrop/src/ui/dialogs/. Every control needs an explicit accessible name viaset_name, and the list needs aStaticTextimmediately before it so NVDA reads it as the list's name.AppEvent, not the UI thread.