From 60a628aefe2aa4901884846e2d25305d7069c1fe Mon Sep 17 00:00:00 2001 From: Kingtous Date: Tue, 28 Jun 2022 22:04:10 +0800 Subject: [PATCH] fix: window close hook Signed-off-by: Kingtous --- flutter/lib/desktop/pages/connection_tab_page.dart | 13 +++++++++++++ .../lib/desktop/pages/file_manager_tab_page.dart | 13 ++++++++++++- flutter/lib/models/model.dart | 8 ++++---- flutter/pubspec.yaml | 2 +- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/flutter/lib/desktop/pages/connection_tab_page.dart b/flutter/lib/desktop/pages/connection_tab_page.dart index 8d18b2f24..69c10ebff 100644 --- a/flutter/lib/desktop/pages/connection_tab_page.dart +++ b/flutter/lib/desktop/pages/connection_tab_page.dart @@ -2,9 +2,13 @@ import 'dart:convert'; import 'dart:math'; import 'package:flutter/material.dart'; +import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/desktop/pages/remote_page.dart'; import 'package:flutter_hbb/desktop/widgets/titlebar_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 params; @@ -51,6 +55,15 @@ class _ConnectionTabPageState extends State }); } }); + } else if (call.method == "onDestroy") { + print("executing onDestroy hook, closing ${connectionIds}"); + connectionIds.forEach((id) { + final tag = '${id}'; + ffi(tag).close().then((_) { + Get.delete(tag: tag); + }); + }); + Get.back(); } }); } diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index af65c86df..6c9f199b7 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -2,8 +2,10 @@ import 'dart:convert'; import 'dart:math'; 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/titlebar_widget.dart'; +import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:get/get.dart'; @@ -21,7 +23,7 @@ class _FileManagerTabPageState extends State with SingleTickerProviderStateMixin { // refactor List when using multi-tab // this singleton is only for test - List connectionIds = List.empty(growable: true); + var connectionIds = List.empty(growable: true).obs; var initialIndex = 0.obs; _FileManagerTabPageState(Map params) { @@ -47,6 +49,15 @@ class _FileManagerTabPageState extends State connectionIds.add(id); initialIndex.value = connectionIds.length - 1; } + } else if (call.method == "onDestroy") { + print("executing onDestroy hook, closing ${connectionIds}"); + connectionIds.forEach((id) { + final tag = 'ft_${id}'; + ffi(tag).close().then((_) { + Get.delete(tag: tag); + }); + }); + Get.back(); } }); } diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 8d4737c5a..b4b618666 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -954,10 +954,10 @@ class FFI { } /// Close the remote session. - void close() { + Future close() async { chatModel.close(); if (imageModel.image != null && !isWebDesktop) { - savePreference(id, cursorModel.x, cursorModel.y, canvasModel.x, + await savePreference(id, cursorModel.x, cursorModel.y, canvasModel.x, canvasModel.y, canvasModel.scale, ffiModel.pi.currentDisplay); } bind.sessionClose(id: id); @@ -1085,8 +1085,8 @@ class PeerInfo { List displays = []; } -void savePreference(String id, double xCursor, double yCursor, double xCanvas, - double yCanvas, double scale, int currentDisplay) async { +Future savePreference(String id, double xCursor, double yCursor, + double xCanvas, double yCanvas, double scale, int currentDisplay) async { SharedPreferences prefs = await SharedPreferences.getInstance(); final p = Map(); p['xCursor'] = xCursor; diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 3b6a51a90..4bbc2f3c5 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -62,7 +62,7 @@ dependencies: desktop_multi_window: git: url: https://github.com/Kingtous/rustdesk_desktop_multi_window - ref: c7d97cb6615f2def34f8bad4def01af9e0077beb + ref: 7b72918710921f5fe79eae2dbaa411a66f5dfb45 # bitsdojo_window: ^0.1.2 freezed_annotation: ^2.0.3 tray_manager: 0.1.7