diff --git a/flutter/lib/desktop/pages/connection_tab_page.dart b/flutter/lib/desktop/pages/connection_tab_page.dart index c8cde79ad..445590037 100644 --- a/flutter/lib/desktop/pages/connection_tab_page.dart +++ b/flutter/lib/desktop/pages/connection_tab_page.dart @@ -9,8 +9,6 @@ import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:get/get.dart'; -import '../../models/model.dart'; - class ConnectionTabPage extends StatefulWidget { final Map<String, dynamic> params; @@ -73,14 +71,7 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> { fullscreen.isTrue ? 0 : kDesktopRemoteTabBarHeight, )))); } else if (call.method == "onDestroy") { - tabController.state.value.tabs.forEach((tab) { - print("executing onDestroy hook, closing ${tab.label}}"); - final tag = tab.label; - ffi(tag).close().then((_) { - Get.delete<FFI>(tag: tag); - }); - }); - Get.back(); + tabController.state.value.tabs.clear(); } }); } @@ -116,9 +107,8 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> { } void onRemoveId(String id) { - ffi(id).close(); - if (tabController.state.value.tabs.length == 0) { - WindowController.fromWindowId(windowId()).close(); + if (tabController.state.value.tabs.isEmpty) { + WindowController.fromWindowId(windowId()).hide(); } } diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index da76890d4..e391afd71 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/desktop/pages/file_manager_page.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; -import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:get/get.dart'; @@ -42,7 +41,7 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> { rustDeskWinManager.setMethodHandler((call, fromWindowId) async { print( - "call ${call.method} with args ${call.arguments} from window ${fromWindowId}"); + "call ${call.method} with args ${call.arguments} from window ${fromWindowId} to ${windowId()}"); // for simplify, just replace connectionId if (call.method == "new_file_transfer") { final args = jsonDecode(call.arguments); @@ -55,21 +54,15 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> { unselectedIcon: unselectedIcon, page: FileManagerPage(key: ValueKey(id), id: id))); } else if (call.method == "onDestroy") { - tabController.state.value.tabs.forEach((tab) { - print("executing onDestroy hook, closing ${tab.label}}"); - final tag = 'ft_${tab.label}'; - ffi(tag).close().then((_) { - Get.delete<FFI>(tag: tag); - }); - }); - Get.back(); + tabController.state.value.tabs.clear(); } }); } @override Widget build(BuildContext context) { - final theme = isDarkTheme() ? TarBarTheme.dark() : TarBarTheme.light(); + final theme = + isDarkTheme() ? const TarBarTheme.dark() : const TarBarTheme.light(); return SubWindowDragToResizeArea( windowId: windowId(), child: Container( @@ -90,9 +83,8 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> { } void onRemoveId(String id) { - ffi("ft_$id").close(); - if (tabController.state.value.tabs.length == 0) { - WindowController.fromWindowId(windowId()).close(); + if (tabController.state.value.tabs.isEmpty) { + WindowController.fromWindowId(windowId()).hide(); } } diff --git a/flutter/lib/desktop/pages/port_forward_tab_page.dart b/flutter/lib/desktop/pages/port_forward_tab_page.dart index 6323a0af9..7555d9745 100644 --- a/flutter/lib/desktop/pages/port_forward_tab_page.dart +++ b/flutter/lib/desktop/pages/port_forward_tab_page.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/desktop/pages/port_forward_page.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; -import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:get/get.dart'; @@ -44,7 +43,7 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> { tabController.onRemove = (_, id) => onRemoveId(id); rustDeskWinManager.setMethodHandler((call, fromWindowId) async { - print( + debugPrint( "call ${call.method} with args ${call.arguments} from window ${fromWindowId}"); // for simplify, just replace connectionId if (call.method == "new_port_forward") { @@ -59,14 +58,7 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> { unselectedIcon: unselectedIcon, page: PortForwardPage(id: id, isRDP: isRDP))); } else if (call.method == "onDestroy") { - tabController.state.value.tabs.forEach((tab) { - print("executing onDestroy hook, closing ${tab.label}}"); - final tag = 'pf_${tab.label}'; - ffi(tag).close().then((_) { - Get.delete<FFI>(tag: tag); - }); - }); - Get.back(); + tabController.state.value.tabs.clear(); } }); } @@ -95,8 +87,8 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> { void onRemoveId(String id) { ffi("pf_$id").close(); - if (tabController.state.value.tabs.length == 0) { - WindowController.fromWindowId(windowId()).close(); + if (tabController.state.value.tabs.isEmpty) { + WindowController.fromWindowId(windowId()).hide(); } } diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 09f1ee4b5..b126ca7e3 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -6,8 +6,8 @@ import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/main.dart'; import 'package:get/get.dart'; -import 'package:window_manager/window_manager.dart'; import 'package:scroll_pos/scroll_pos.dart'; +import 'package:window_manager/window_manager.dart'; import '../../utils/multi_window_manager.dart'; @@ -323,7 +323,8 @@ class WindowActionPanel extends StatelessWidget { if (mainTab) { windowManager.close(); } else { - WindowController.fromWindowId(windowId!).close(); + // only hide for multi window, not close + WindowController.fromWindowId(windowId!).hide(); } }, is_close: true, diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 58ea849ce..70e922bce 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1110,7 +1110,7 @@ class FFI { ffiModel.clear(); canvasModel.clear(); resetModifiers(); - print("model closed"); + debugPrint("model $id closed"); } /// Send **get** command to the Rust core based on [name] and [arg]. diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index b01b84a9d..fb6ce11ed 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -163,7 +163,7 @@ class RustDeskMultiWindowManager { // no such window already return; } - await WindowController.fromWindowId(wId).close(); + await WindowController.fromWindowId(wId).hide(); } on Error { return; } diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index ea5ff449c..d2bc7b1a8 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -252,8 +252,8 @@ packages: dependency: "direct main" description: path: "." - ref: "14a001e83ab0e7c8cb119f7f65be4e3056a954fb" - resolved-ref: "14a001e83ab0e7c8cb119f7f65be4e3056a954fb" + ref: e0368a023ba195462acc00d33ab361b499f0e413 + resolved-ref: e0368a023ba195462acc00d33ab361b499f0e413 url: "https://github.com/Kingtous/rustdesk_desktop_multi_window" source: git version: "0.1.0" diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index b765a5b17..799a2797a 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -65,7 +65,7 @@ dependencies: desktop_multi_window: git: url: https://github.com/Kingtous/rustdesk_desktop_multi_window - ref: 14a001e83ab0e7c8cb119f7f65be4e3056a954fb + ref: e0368a023ba195462acc00d33ab361b499f0e413 freezed_annotation: ^2.0.3 tray_manager: git: