diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 5eb88399f..e99d5d226 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -718,7 +718,9 @@ closeConnection({String? id}) { final controller = Get.find(); if (controller.tabType == DesktopTabType.terminal && controller.onCloseWindow != null) { - controller.onCloseWindow!(); + unawaited(controller.onCloseWindow!().catchError((e, _) { + debugPrint('[closeConnection] Failed to close terminal window: $e'); + })); return; } controller.closeBy(id); @@ -4184,8 +4186,7 @@ Widget? buildAvatarWidget({ width: size, height: size, fit: BoxFit.cover, - errorBuilder: (_, __, ___) => - fallback ?? SizedBox.shrink(), + errorBuilder: (_, __, ___) => fallback ?? SizedBox.shrink(), ), ); } diff --git a/flutter/lib/desktop/pages/terminal_tab_page.dart b/flutter/lib/desktop/pages/terminal_tab_page.dart index 8b9ade2de..eed0a8423 100644 --- a/flutter/lib/desktop/pages/terminal_tab_page.dart +++ b/flutter/lib/desktop/pages/terminal_tab_page.dart @@ -371,6 +371,12 @@ class _TerminalTabPageState extends State { final sortedSessions = persistentSessions.whereType().toList()..sort(); var peerId = args['peer_id'] as String? ?? ''; if (peerId.isEmpty) { + if (tabController.state.value.tabs.isEmpty || + tabController.state.value.selected >= + tabController.state.value.tabs.length) { + debugPrint('[TerminalTabPage] Skip restore: no selected tab'); + return; + } final currentTab = tabController.state.value.selectedTabInfo; final parsed = _parseTabKey(currentTab.key); if (parsed == null) return; @@ -381,6 +387,11 @@ class _TerminalTabPageState extends State { .where((parsed) => parsed != null && parsed.$1 == peerId) .map((parsed) => parsed!.$2) .toSet(); + if (existingTerminalIds.isEmpty) { + debugPrint( + '[TerminalTabPage] Skip restore: no seed tab for peer $peerId'); + return; + } for (final terminalId in sortedSessions) { if (!existingTerminalIds.add(terminalId)) { continue; diff --git a/src/server/terminal_service.rs b/src/server/terminal_service.rs index 507cebc6f..20848701f 100644 --- a/src/server/terminal_service.rs +++ b/src/server/terminal_service.rs @@ -1059,7 +1059,11 @@ impl TerminalServiceProxy { let mut opened = TerminalOpened::new(); opened.terminal_id = open.terminal_id; opened.success = true; - opened.message = "Reconnected to existing terminal".to_string(); + opened.message = if has_pending { + "Reconnected to existing terminal with pending output".to_string() + } else { + "Reconnected to existing terminal".to_string() + }; opened.pid = session.pid; opened.service_id = self.service_id.clone(); if service.needs_session_sync {