- Redesign sidebar layout and management mode:
- Add explicit "Edit" / "Done" toggle button in the sidebar header to toggle connection management mode cleanly.
- Remove top sidebar Import/Export buttons and move them into the Settings dialog ("配置文件与备份" / Config File & Backup page).
- Remove the bottom right Switch toggle widget from sidebar layout.
- Add a full-width "+ 新增分组" button below the connection filter search box in Edit Mode.
- Improve connection item click UX:
- Make the entire connection row clickable in non-edit mode to immediately launch saved sessions.
- Hide redundant external link icon button in non-edit mode for a cleaner sidebar appearance.
- Allow user resizing of sidebar width down to 200px while maintaining default 310px.
- Fix tab bar hover panic & dropdown navigation:
- Remove duplicate `.hover(...)` call on tab close button to resolve GPUI runtime debug assert panic ("hover style already set").
- Update tab bar '+' dropdown menu second item to "打开连接" (Open Connection), triggering the Session Selector Dialog (`show_selector_dialog`).
- Add corresponding localization strings in English and Simplified Chinese.
Add AuthMethod::Config: parse ~/.ssh/config and list concrete host
entries in the connection dialog. Selecting an entry pre-fills
host/port/user/identity file and connects.
- Extract shared key utilities into session::ssh_keys
(private_keys_with_algs, normalize_inline_private_key,
authenticate_with_default_keys, session_has_explicit_key), reused by
backend::ssh and sftp to remove duplication.
- Add session::ssh_config parser for ~/.ssh/config (Host/HostName/User/
Port/IdentityFile), skipping wildcard patterns and Match/Include.
- Key auth now falls back to default keys (~/.ssh/id_*) when no explicit
key path or inline content is provided.
- Preserve escaped \r\n normalization in normalize_inline_private_key
when refactoring into the shared module.
- encrypt SSH configuration with Argon2id and XChaCha20-Poly1305
- support WebDAV and S3-compatible storage backends
- add ETag-based conflict protection
- add sync settings and localized UI
- keep remote credentials in memory only
Introduced a new configuration setting allowing users to choose between:
1. Native: Standard OS title bar with the tab bar rendered below it.
2. Integrated: Custom title bar with Mac-style controls and embedded tabs.
Updated:
- ConfigFile/Store to include title_bar_style (defaulting to Native).
- localization files for English and Chinese with 'Restart required' hints.
- Settings dialog with a new dropdown in the Appearance group.
- Startup and UI logic to handle conditional title bar and tab bar rendering.
- UI now uses the title bar style detected at startup to ensure consistency
until the application is restarted.
- Restored Windows app icon loading in startup.rs.
- Fixed Native mode layout to match previous standard behavior.
- default follow_system_theme to true and remove empty theme-name fallback override\n- add backward compatibility for v0.3.11 transfer state values during config load\n- preserve old config files by backing up parse failures instead of silently overwriting them\n- add optional SSH key passphrase input to the new SSH form and persist it in sessions\n- use stored passphrases when loading private keys for SSH and SFTP connections\n- make terminal size sync prefer measured bounds to reduce unused space at the bottom
- Add an independent scrollbar track to prevent it from overlapping with the content list
- Add a "Clear History" button with text label, placed seamlessly next to the close button in the custom header
- Implement a 100-record limit for transfer history and display this limit in the header
- Persist the cleared transfer history into the session config immediately after clearing
- Disable default dialog close button and reconstruct header to avoid state update collision and panic
Resolves#25
- Active Tab: Now uses `FontWeight::BOLD`, `text_base()` font size, and the primary theme color. This makes it far more distinct from inactive tabs, especially in themes where background differences are subtle.
- Settings Dialog: Overrode the default sidebar style to use the main dialog background (`cx.theme().background`), seamlessly blending the sidebar with the content pane.
- Refactor: Renamed unused `_cx` parameter to `cx` in the settings dialog render closure since it is now being utilized to access the theme.