RustDesk/flutter/lib/desktop/pages
rustdesk 04faf21c78 feat: keyboard shortcuts in remote sessions
Add an opt-in keyboard-shortcut system that triggers session
actions (Send Ctrl+Alt+Del, Toggle Fullscreen, Switch Display,
Screenshot, Switch Tab, etc.) via three-modifier combinations
during a remote session.

Architecture
- Native: src/keyboard/shortcuts.rs intercepts at the encoder
  layer (process_event and process_event_with_session), so the
  feature is input-source-independent. Bindings persist as a
  single JSON blob in LocalConfig.
- Web: matching + keydown intercept live in the separate hand-
  written TS client at flutter/web/js/ (gitignored, not in this
  repo). flutter/lib/web/bridge.dart::mainInit registers
  window.onShortcutTriggered so the JS matcher can dispatch
  back into the active session's ShortcutModel; the bridge's
  mainReloadKeyboardShortcuts forwards to a JS reloadShortcuts
  on settings writes.
- Three-modifier prefix (Ctrl+Alt+Shift; Cmd+Option+Shift on
  macOS/iOS) sidesteps the need for a pass-through toggle.
- Flutter native path threads the explicit per-call SessionID
  for tab-precise routing; rdev path uses globally-current
  session.

UI
- Settings -> General -> Keyboard Shortcuts opens a dedicated
  configuration page; desktop and mobile share a body widget.
- Recording dialog with live capture, prefix validation, and a
  conflict-replace flow.
- Toolbar menu items display the bound shortcut inline.
- Default bindings (adapted from AnyDesk):
    +Del    Send Ctrl+Alt+Del
    +Enter  Toggle Fullscreen
    +Left/Right  Switch Display Prev/Next
    +P      Screenshot
    +1..9   Switch Session Tab

Other
- AGENTS.md: documented (a) flutter_rust_bridge_codegen needs
  a pinned version + Dart bridge wrappers should be hand-
  written, and (b) the Web-target split where flutter/web/js/
  is the runtime owner on Web rather than wasm-compiled Rust.
- 38 new i18n strings in src/lang/en.rs with Chinese
  translations in src/lang/cn.rs.

Refs discussion #1933.
2026-04-28 15:48:12 +08:00
..
connection_page.dart show peer note (#13140) 2025-10-12 14:59:42 +08:00
desktop_home_page.dart refact(password): Store permanent password as hashed verifier (#14619) 2026-03-26 14:49:54 +08:00
desktop_keyboard_shortcuts_page.dart feat: keyboard shortcuts in remote sessions 2026-04-28 15:48:12 +08:00
desktop_setting_page.dart feat: keyboard shortcuts in remote sessions 2026-04-28 15:48:12 +08:00
desktop_tab_page.dart always block desktop settings page if video connection exists (#10224) 2024-12-08 18:26:55 +08:00
file_manager_page.dart fix(desktop): wakelock issue with multiple tabs in same window (#13956) 2026-01-05 22:16:35 +08:00
file_manager_tab_page.dart ask for note at end of connection (#13499) 2025-11-13 23:35:40 +08:00
install_page.dart feat: remote printer (#11231) 2025-03-27 15:34:27 +08:00
port_forward_page.dart ask for note at end of connection (#13499) 2025-11-13 23:35:40 +08:00
port_forward_tab_page.dart fix: win10, border (#10753) 2025-02-10 13:50:28 +08:00
remote_page.dart feat: keyboard shortcuts in remote sessions 2026-04-28 15:48:12 +08:00
remote_tab_page.dart feat: Add relative mouse mode (#13928) 2026-01-09 10:03:14 +08:00
server_page.dart fix avatar fallback (#14458) 2026-03-05 12:30:40 +08:00
terminal_connection_manager.dart terminal works basically. (#12189) 2025-07-01 13:12:55 +08:00
terminal_page.dart fix(terminal): fix new tab auto-focus and NaN error on data before layout (#14357) 2026-02-20 14:44:25 +08:00
terminal_tab_page.dart feat(terminal): add reconnection buffer support for persistent sessions (#14377) 2026-02-24 21:12:06 +08:00
view_camera_page.dart fix(desktop): wakelock issue with multiple tabs in same window (#13956) 2026-01-05 22:16:35 +08:00
view_camera_tab_page.dart refact: remote toolbar show/hide (#13843) 2025-12-19 20:45:22 +08:00