diff --git a/flutter/lib/desktop/pages/connection_tab_page.dart b/flutter/lib/desktop/pages/connection_tab_page.dart index 3dd825f36..e5caccd71 100644 --- a/flutter/lib/desktop/pages/connection_tab_page.dart +++ b/flutter/lib/desktop/pages/connection_tab_page.dart @@ -39,11 +39,7 @@ class _ConnectionTabPageState extends State { label: peerId, selectedIcon: selectedIcon, unselectedIcon: unselectedIcon, - onTabCloseButton: () { - debugPrint("onTabCloseButton"); - tabController.jumpBy(peerId); - clientClose(ffi(peerId).dialogManager); - }, + onTabCloseButton: () => handleTabCloseButton(peerId), page: RemotePage( key: ValueKey(peerId), id: peerId, @@ -75,11 +71,7 @@ class _ConnectionTabPageState extends State { label: id, selectedIcon: selectedIcon, unselectedIcon: unselectedIcon, - onTabCloseButton: () { - debugPrint("onTabCloseButton"); - tabController.jumpBy(id); - clientClose(ffi(id).dialogManager); - }, + onTabCloseButton: () => handleTabCloseButton(id), page: RemotePage( key: ValueKey(id), id: id, @@ -165,4 +157,14 @@ class _ConnectionTabPageState extends State { int windowId() { return widget.params["windowId"]; } + + void handleTabCloseButton(String peerId) { + final session = ffi(peerId); + if (session.ffiModel.pi.hostname.isNotEmpty) { + tabController.jumpBy(peerId); + clientClose(session.dialogManager); + } else { + tabController.closeBy(peerId); + } + } } diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index d33c0084c..42c50b927 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -8,6 +8,8 @@ import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:get/get.dart'; +import '../../mobile/widgets/dialog.dart'; + /// File Transfer for multi tabs class FileManagerTabPage extends StatefulWidget { final Map params; @@ -31,6 +33,7 @@ class _FileManagerTabPageState extends State { label: params['id'], selectedIcon: selectedIcon, unselectedIcon: unselectedIcon, + onTabCloseButton: () => handleTabCloseButton(params['id']), page: FileManagerPage(key: ValueKey(params['id']), id: params['id']))); } @@ -53,6 +56,7 @@ class _FileManagerTabPageState extends State { label: id, selectedIcon: selectedIcon, unselectedIcon: unselectedIcon, + onTabCloseButton: () => handleTabCloseButton(id), page: FileManagerPage(key: ValueKey(id), id: id))); } else if (call.method == "onDestroy") { tabController.clear(); @@ -89,4 +93,14 @@ class _FileManagerTabPageState extends State { int windowId() { return widget.params["windowId"]; } + + void handleTabCloseButton(String peerId) { + final session = ffi('ft_$peerId'); + if (session.ffiModel.pi.hostname.isNotEmpty) { + tabController.jumpBy(peerId); + clientClose(session.dialogManager); + } else { + tabController.closeBy(peerId); + } + } } diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index f2fc5f8ca..fef5fbf1f 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -24,7 +24,7 @@ class TabInfo { final String label; final IconData? selectedIcon; final IconData? unselectedIcon; - final bool closable; // + final bool closable; final VoidCallback? onTabCloseButton; final Widget page; @@ -147,7 +147,6 @@ class DesktopTabController { void closeBy(String? key) { if (!isDesktop) return; - debugPrint("closeBy: $key"); assert(onRemove != null); if (key == null) { if (state.value.selected < state.value.tabs.length) {