mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-05-08 07:08:09 +03:00
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.
61 lines
962 B
Plaintext
61 lines
962 B
Plaintext
/build
|
|
/target
|
|
.vscode
|
|
.idea
|
|
.DS_Store
|
|
.env
|
|
libsciter-gtk.so
|
|
src/ui/inline.rs
|
|
extractor
|
|
__pycache__
|
|
src/version.rs
|
|
*dmg
|
|
*exe
|
|
*tgz
|
|
cert.pfx
|
|
*.bak
|
|
*png
|
|
*svg
|
|
*jpg
|
|
sciter.dll
|
|
**pdb
|
|
src/bridge_generated.rs
|
|
src/bridge_generated.io.rs
|
|
*deb
|
|
rustdesk
|
|
*.cache
|
|
# appimage
|
|
appimage/AppDir
|
|
appimage/*.AppImage
|
|
appimage/appimage-build
|
|
appimage/*.xz
|
|
# flutter
|
|
flutter/linux/build/**
|
|
flutter/linux/cmake-build-debug/**
|
|
# flatpak
|
|
flatpak/.flatpak-builder/**
|
|
flatpak/ccache/**
|
|
flatpak/.flatpak-builder/build/**
|
|
flatpak/.flatpak-builder/shared-modules/**
|
|
flatpak/.flatpak-builder/shared-modules/*.tar.xz
|
|
flatpak/.flatpak-builder/debian-binary
|
|
flatpak/build/**
|
|
flatpak/repo/**
|
|
flatpak/*.flatpak
|
|
# bridge file
|
|
lib/generated_bridge.dart
|
|
# vscode devcontainer
|
|
.gitconfig
|
|
.vscode-server/
|
|
.ssh
|
|
.devcontainer/.*
|
|
# build cache in examples
|
|
examples/**/target/
|
|
# ===
|
|
vcpkg_installed
|
|
flutter/lib/generated_plugin_registrant.dart
|
|
libsciter.dylib
|
|
flutter/web/
|
|
# Local git worktrees
|
|
.worktrees/
|