fix: --cm cannot exit on macOS

This commit is contained in:
Kingtous 2023-02-10 21:18:55 +08:00
parent 506b1f1b10
commit 19c7cd99d5
4 changed files with 21 additions and 7 deletions

View File

@ -49,6 +49,11 @@ int androidVersion = 0;
int windowsBuildNumber = 0;
DesktopType? desktopType;
/// Check if the app is running with single view mode.
bool isSingleViewApp() {
return desktopType == DesktopType.cm;
}
/// * debug or test only, DO NOT enable in release build
bool isTest = false;

View File

@ -1,11 +1,13 @@
// original cm window in Sciter version.
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
import 'package:flutter_hbb/models/chat_model.dart';
import 'package:flutter_hbb/utils/platform_channel.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:window_manager/window_manager.dart';
@ -47,8 +49,17 @@ class _DesktopServerPageState extends State<DesktopServerPage>
@override
void onWindowClose() {
gFFI.serverModel.closeAll();
gFFI.close();
Future.wait([
gFFI.serverModel.closeAll(),
gFFI.close()
]).then((_) {
if (Platform.isMacOS) {
RdPlatformChannel.instance.terminate();
} else {
windowManager.setPreventClose(false);
windowManager.close();
}
});
super.onWindowClose();
}

View File

@ -1399,12 +1399,12 @@ class FFI {
await setCanvasConfig(id, cursorModel.x, cursorModel.y, canvasModel.x,
canvasModel.y, canvasModel.scale, ffiModel.pi.currentDisplay);
}
bind.sessionClose(id: id);
imageModel.update(null);
cursorModel.clear();
ffiModel.clear();
canvasModel.clear();
inputModel.resetModifiers();
await bind.sessionClose(id: id);
debugPrint('model $id closed');
id = '';
}

View File

@ -560,10 +560,8 @@ class ServerModel with ChangeNotifier {
}
}
closeAll() {
for (var client in _clients) {
bind.cmCloseConnection(connId: client.id);
}
Future<void> closeAll() async {
await Future.wait(_clients.map((client) => bind.cmCloseConnection(connId: client.id)));
_clients.clear();
tabController.state.value.tabs.clear();
}