mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-05-08 15:18:13 +03:00
fix(terminal): close terminal window on disconnect dialog
Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -718,7 +718,9 @@ closeConnection({String? id}) {
|
|||||||
final controller = Get.find<DesktopTabController>();
|
final controller = Get.find<DesktopTabController>();
|
||||||
if (controller.tabType == DesktopTabType.terminal &&
|
if (controller.tabType == DesktopTabType.terminal &&
|
||||||
controller.onCloseWindow != null) {
|
controller.onCloseWindow != null) {
|
||||||
controller.onCloseWindow!();
|
unawaited(controller.onCloseWindow!().catchError((e, _) {
|
||||||
|
debugPrint('[closeConnection] Failed to close terminal window: $e');
|
||||||
|
}));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
controller.closeBy(id);
|
controller.closeBy(id);
|
||||||
@@ -4184,8 +4186,7 @@ Widget? buildAvatarWidget({
|
|||||||
width: size,
|
width: size,
|
||||||
height: size,
|
height: size,
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
errorBuilder: (_, __, ___) =>
|
errorBuilder: (_, __, ___) => fallback ?? SizedBox.shrink(),
|
||||||
fallback ?? SizedBox.shrink(),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -371,6 +371,12 @@ class _TerminalTabPageState extends State<TerminalTabPage> {
|
|||||||
final sortedSessions = persistentSessions.whereType<int>().toList()..sort();
|
final sortedSessions = persistentSessions.whereType<int>().toList()..sort();
|
||||||
var peerId = args['peer_id'] as String? ?? '';
|
var peerId = args['peer_id'] as String? ?? '';
|
||||||
if (peerId.isEmpty) {
|
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 currentTab = tabController.state.value.selectedTabInfo;
|
||||||
final parsed = _parseTabKey(currentTab.key);
|
final parsed = _parseTabKey(currentTab.key);
|
||||||
if (parsed == null) return;
|
if (parsed == null) return;
|
||||||
@@ -381,6 +387,11 @@ class _TerminalTabPageState extends State<TerminalTabPage> {
|
|||||||
.where((parsed) => parsed != null && parsed.$1 == peerId)
|
.where((parsed) => parsed != null && parsed.$1 == peerId)
|
||||||
.map((parsed) => parsed!.$2)
|
.map((parsed) => parsed!.$2)
|
||||||
.toSet();
|
.toSet();
|
||||||
|
if (existingTerminalIds.isEmpty) {
|
||||||
|
debugPrint(
|
||||||
|
'[TerminalTabPage] Skip restore: no seed tab for peer $peerId');
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (final terminalId in sortedSessions) {
|
for (final terminalId in sortedSessions) {
|
||||||
if (!existingTerminalIds.add(terminalId)) {
|
if (!existingTerminalIds.add(terminalId)) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -1059,7 +1059,11 @@ impl TerminalServiceProxy {
|
|||||||
let mut opened = TerminalOpened::new();
|
let mut opened = TerminalOpened::new();
|
||||||
opened.terminal_id = open.terminal_id;
|
opened.terminal_id = open.terminal_id;
|
||||||
opened.success = true;
|
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.pid = session.pid;
|
||||||
opened.service_id = self.service_id.clone();
|
opened.service_id = self.service_id.clone();
|
||||||
if service.needs_session_sync {
|
if service.needs_session_sync {
|
||||||
|
|||||||
Reference in New Issue
Block a user