aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2019-04-06 15:22:05 +0530
committerRoopesh Chander <roop@roopc.net>2019-04-06 17:53:41 +0530
commit11063d0f887101aec84db07f6bd2ec111f0141ce (patch)
treedfd2f6e1738daff46fc0de56ed8cf5dd27734199 /WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift
parentTunnelsManager: When setting a config, also set isAvailable cache (diff)
downloadwireguard-apple-11063d0f887101aec84db07f6bd2ec111f0141ce.tar.xz
wireguard-apple-11063d0f887101aec84db07f6bd2ec111f0141ce.zip
macOS: Tunnels list: Suppress alert buttons when removing tunnels is in progress
Also refactor the deletion alert into a separate helper class Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to '')
-rw-r--r--WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift53
1 files changed, 19 insertions, 34 deletions
diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift
index 8918f79..40a2b9e 100644
--- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift
+++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift
@@ -163,9 +163,15 @@ class TunnelsListTableViewController: NSViewController {
@objc func handleRemoveTunnelAction() {
guard let window = view.window else { return }
+
let selectedTunnelIndices = tableView.selectedRowIndexes.sorted().filter { $0 >= 0 && $0 < tunnelsManager.numberOfTunnels() }
guard !selectedTunnelIndices.isEmpty else { return }
- let alert = NSAlert()
+ var nextSelection = selectedTunnelIndices.last! + 1
+ if nextSelection >= tunnelsManager.numberOfTunnels() {
+ nextSelection = max(selectedTunnelIndices.first! - 1, 0)
+ }
+
+ let alert = DeleteTunnelsConfirmationAlert()
if selectedTunnelIndices.count == 1 {
let firstSelectedTunnel = tunnelsManager.tunnel(at: selectedTunnelIndices.first!)
alert.messageText = tr(format: "macDeleteTunnelConfirmationAlertMessage (%@)", firstSelectedTunnel.name)
@@ -173,41 +179,20 @@ class TunnelsListTableViewController: NSViewController {
alert.messageText = tr(format: "macDeleteMultipleTunnelsConfirmationAlertMessage (%d)", selectedTunnelIndices.count)
}
alert.informativeText = tr("macDeleteTunnelConfirmationAlertInfo")
- let alertDeleteButton = alert.addButton(withTitle: tr("macDeleteTunnelConfirmationAlertButtonTitleDelete"))
- alertDeleteButton.target = self
- alertDeleteButton.action = #selector(removeTunnelAlertDeleteClicked)
- let alertCancelButton = alert.addButton(withTitle: tr("macDeleteTunnelConfirmationAlertButtonTitleCancel"))
- alertCancelButton.target = self
- alertCancelButton.action = #selector(removeTunnelAlertCancelClicked)
- alert.beginSheetModal(for: window) { _ in }
- }
-
- @objc func removeTunnelAlertDeleteClicked(_ sender: AnyObject) {
- guard let alertWindow = (sender as? NSView)?.window, alertWindow.isSheet else { return }
- let selectedTunnelIndices = tableView.selectedRowIndexes.sorted().filter { $0 >= 0 && $0 < tunnelsManager.numberOfTunnels() }
- precondition(!selectedTunnelIndices.isEmpty)
- var nextSelection = selectedTunnelIndices.last! + 1
- if nextSelection >= tunnelsManager.numberOfTunnels() {
- nextSelection = max(selectedTunnelIndices.first! - 1, 0)
- }
- let selectedTunnels = selectedTunnelIndices.map { tunnelsManager.tunnel(at: $0) }
- alertWindow.ignoresMouseEvents = true
- self.selectTunnel(at: nextSelection)
- isRemovingTunnels = true
- tunnelsManager.removeMultiple(tunnels: selectedTunnels) { [weak self] error in
+ alert.onDeleteClicked = { [weak self] completion in
guard let self = self else { return }
- self.view.window?.endSheet(alertWindow)
- self.isRemovingTunnels = false
- if let error = error {
- ErrorPresenter.showErrorAlert(error: error, from: self)
- return
- }
+ self.selectTunnel(at: nextSelection)
+ let selectedTunnels = selectedTunnelIndices.map { self.tunnelsManager.tunnel(at: $0) }
+ self.tunnelsManager.removeMultiple(tunnels: selectedTunnels) { [weak self] error in
+ guard let self = self else { return }
+ defer { completion() }
+ if let error = error {
+ ErrorPresenter.showErrorAlert(error: error, from: self)
+ return
+ }
+ }
}
- }
-
- @objc func removeTunnelAlertCancelClicked(_ sender: AnyObject) {
- guard let alertWindow = (sender as? NSView)?.window, alertWindow.isSheet else { return }
- view.window?.endSheet(alertWindow)
+ alert.beginSheetModal(for: window)
}
@objc func handleViewLogAction() {