mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-05-02 10:16:28 +02:00
fix(terminal): reconnect suppress next output
Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -58,8 +58,7 @@ class _TerminalPageState extends State<TerminalPage>
|
||||
super.initState();
|
||||
|
||||
// Listen for tab selection changes to request focus
|
||||
_tabStateSubscription =
|
||||
widget.tabController.state.listen(_onTabStateChanged);
|
||||
_tabStateSubscription = widget.tabController.state.listen(_onTabStateChanged);
|
||||
|
||||
// Use shared FFI instance from connection manager
|
||||
_ffi = TerminalConnectionManager.getConnection(
|
||||
@@ -146,9 +145,7 @@ class _TerminalPageState extends State<TerminalPage>
|
||||
// Use post-frame callback to ensure widget is fully laid out in focus tree
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
// Re-check conditions after frame: mounted, focusable, still selected, not already focused
|
||||
if (!mounted ||
|
||||
!_terminalFocusNode.canRequestFocus ||
|
||||
_terminalFocusNode.hasFocus) return;
|
||||
if (!mounted || !_terminalFocusNode.canRequestFocus || _terminalFocusNode.hasFocus) return;
|
||||
final state = widget.tabController.state.value;
|
||||
if (state.selected >= 0 && state.selected < state.tabs.length) {
|
||||
if (state.tabs[state.selected].key == widget.tabKey) {
|
||||
|
||||
@@ -288,8 +288,7 @@ class TerminalModel with ChangeNotifier {
|
||||
// On reconnect, the server may replay recent output. That replay can include
|
||||
// terminal queries like DSR/DA; xterm answers them through onOutput as
|
||||
// "^[[1;1R^[[2;2R^[[>0;0;0c", which must not be sent back to the peer.
|
||||
_suppressNextTerminalDataOutput =
|
||||
message == 'Reconnected to existing terminal with pending output';
|
||||
_suppressNextTerminalDataOutput = evt['replay_in_next_data'] == true;
|
||||
|
||||
// Fallback: if terminal view is not yet ready but already has valid
|
||||
// dimensions (e.g. layout completed before open response arrived),
|
||||
|
||||
@@ -1135,6 +1135,7 @@ impl InvokeUiSession for FlutterHandler {
|
||||
("message", json!(&opened.message)),
|
||||
("pid", json!(opened.pid)),
|
||||
("service_id", json!(&opened.service_id)),
|
||||
("replay_in_next_data", json!(opened.replay_in_next_data)),
|
||||
];
|
||||
if !opened.persistent_sessions.is_empty() {
|
||||
event_data.push(("persistent_sessions", json!(opened.persistent_sessions)));
|
||||
|
||||
@@ -1111,6 +1111,7 @@ impl TerminalServiceProxy {
|
||||
} else {
|
||||
"Reconnected to existing terminal".to_string()
|
||||
};
|
||||
opened.replay_in_next_data = has_pending;
|
||||
opened.pid = session.pid;
|
||||
opened.service_id = self.service_id.clone();
|
||||
if service.needs_session_sync {
|
||||
|
||||
Reference in New Issue
Block a user