rustdesk/flutter/lib/models
Artur Puig 3ce8e2cf1b feat(mobile): inline persistent terminal — multiple tabs beside the live screen
Add an embeddable, multi-tab persistent terminal to the mobile remote session:
open one or more terminal tabs in a resizable sheet over the live screen stream,
all on a single authenticated connection. This lets you watch the remote screen
and run shell commands at the same time — like an SSH+tmux split, built into
RustDesk with no external wrapper.

Client-only: no changes under src/ or libs/ — the server and protocol stay
stock. The feature reuses RustDesk's native terminal stack (TerminalModel + the
`terminal-persistent` option), so sessions survive disconnect/idle and reattach
on reconnect.

Highlights:
- Multiple tabs over ONE connection (TerminalConnectionManager keeps one FFI per
  peer, refcounted); each tab is a distinct terminal_id, one live TerminalView
  per tab in an IndexedStack.
- Persistent sessions: on (re)connect the server's surviving session ids are
  offered as tabs to reattach; `exit` closes the tab and reaps the session.
- Keyboard routed to the terminal while it's open (not the remote desktop), with
  a Termius-style accessory bar: sticky Ctrl/Alt that combine with the next key.
- One Dark theme; resizable/maximizable sheet that stays clear of the system
  bars and the soft keyboard.
- Hardening of the shared terminal stack it builds on: use-after-dispose guards,
  identity-checked event routing, an error-safe per-peer connection pool, and
  guarded padding math.

The desktop split-view reuses the same InlineTerminalPanel.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 17:03:21 +02:00
..
ab_model.dart flutter: improve address book pull error handling (#14813) 2026-04-18 11:19:32 +08:00
chat_model.dart fix: web chat (#9588) 2024-10-08 15:23:00 +08:00
cm_file_model.dart feat(fs): delegate win --server file reading to CM (#13736) 2025-12-28 15:39:35 +08:00
desktop_render_texture.dart view camera (#11040) 2025-03-10 21:06:53 +08:00
file_model.dart fix(fs): file transfer, reconnect, restore dir (#14925) 2026-05-10 10:08:29 +08:00
group_model.dart flutter: improve address book pull error handling (#14813) 2026-04-18 11:19:32 +08:00
input_model.dart fix(ios): mouse mismatch (#15339) 2026-06-19 20:50:56 +08:00
input_modifier_utils.dart flutter: shift after one shot IME capitalization (#14695) 2026-04-26 22:44:26 +08:00
model.dart feat(mobile): inline persistent terminal — multiple tabs beside the live screen 2026-06-21 17:03:21 +02:00
native_model.dart fix: ios, file transfer, home dir (#12657) 2025-08-15 00:00:05 +08:00
peer_model.dart autocomplete online (#15313) 2026-06-17 22:04:34 +08:00
peer_tab_model.dart disable-discovery-pane 2025-09-01 17:07:29 +08:00
platform_model.dart fix: web send audit note (#9582) 2024-10-07 21:37:43 +08:00
printer_model.dart feat: take screenshot (#11591) 2025-04-30 17:23:35 +08:00
relative_mouse_model.dart feat: Add relative mouse mode (#13928) 2026-01-09 10:03:14 +08:00
server_model.dart feat: option, enable-privacy-mode & enable-perm-change-in-accept-window (#14875) 2026-05-02 00:44:22 +08:00
state_model.dart feat: Add relative mouse mode (#13928) 2026-01-09 10:03:14 +08:00
terminal_model.dart feat(mobile): inline persistent terminal — multiple tabs beside the live screen 2026-06-21 17:03:21 +02:00
user_model.dart avatar (#14440) 2026-03-04 21:43:19 +08:00
web_model.dart Revert "try fix firefox v2 paste problem" (#12126) 2025-06-19 22:31:40 +08:00