diff --git a/lib/controller.dart b/lib/controller.dart index 272c2e347..d2fa1ee50 100644 --- a/lib/controller.dart +++ b/lib/controller.dart @@ -575,14 +575,18 @@ class AppController { } Future handleExit() async { + const exitTimeout = Duration(seconds: 5); try { stopWakelockAutoRecovery(); await savePreferences(); await Future.wait([ - if (macOS != null) macOS!.updateDns(true), - if (proxy != null) proxy!.stopProxy(), - clashCore.shutdown(), - if (clashService != null) clashService!.destroy(), + if (macOS != null) + macOS!.updateDns(true).timeout(exitTimeout, onTimeout: () {}), + if (proxy != null) + proxy!.stopProxy().timeout(exitTimeout, onTimeout: () {}), + clashCore.shutdown().timeout(exitTimeout, onTimeout: () {}), + if (clashService != null) + clashService!.destroy().timeout(exitTimeout, onTimeout: () {}), ].whereType>().toList()); } finally { system.exit(); diff --git a/lib/manager/window_manager.dart b/lib/manager/window_manager.dart index 6eef47401..cadc44fe8 100644 --- a/lib/manager/window_manager.dart +++ b/lib/manager/window_manager.dart @@ -79,6 +79,7 @@ class _WindowContainerState extends ConsumerState @override void onWindowClose() async { + globalState.appController.unBackBlock(); await globalState.appController.handleBackOrExit(); }