macOS: Show alert if exiting with an active tunnel

Instead of deactivating the tunnel.

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander 2019-02-08 03:01:17 +05:30
parent ecd66defe5
commit a99a755c34
2 changed files with 25 additions and 3 deletions

View File

@ -323,3 +323,8 @@
"macViewPrivateData" = "view tunnel private keys";
"iosExportPrivateData" = "Authenticate to export tunnel private keys.";
"iosViewPrivateData" = "Authenticate to view tunnel private keys.";
// Mac alert
"macAppExitingWithActiveTunnelMessage" = "WireGuard is exiting with an active tunnel";
"macAppExitingWithActiveTunnelInfo" = "The tunnel will remain active after exiting. You may disable it by reopening this application or through the Network panel in System Preferences.";

View File

@ -12,6 +12,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
var manageTunnelsRootVC: ManageTunnelsRootViewController?
var manageTunnelsWindowObject: NSWindow?
var isTerminationAlertShown = false
func applicationDidFinishLaunching(_ aNotification: Notification) {
Logger.configureGlobal(withFilePath: FileManager.appLogFileURL?.path)
@ -41,9 +42,25 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
}
func applicationWillTerminate(_ notification: Notification) {
if let currentTunnel = tunnelsTracker?.currentTunnel {
tunnelsManager?.startDeactivation(of: currentTunnel)
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
guard let currentTunnel = tunnelsTracker?.currentTunnel, currentTunnel.status == .active || currentTunnel.status == .activating else {
return .terminateNow
}
if isTerminationAlertShown {
return .terminateNow
}
let alert = NSAlert()
alert.messageText = tr("macAppExitingWithActiveTunnelMessage")
alert.informativeText = tr("macAppExitingWithActiveTunnelInfo")
if let window = manageTunnelsWindowObject {
alert.beginSheetModal(for: window) { [weak self] _ in
self?.isTerminationAlertShown = true
NSApp.terminate(nil)
}
return .terminateCancel
} else {
alert.runModal()
return .terminateNow
}
}
}