aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--WireGuard/WireGuard/UI/macOS/Application.swift42
-rw-r--r--WireGuard/WireGuard/UI/macOS/StatusMenu.swift5
-rw-r--r--WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift1
3 files changed, 40 insertions, 8 deletions
diff --git a/WireGuard/WireGuard/UI/macOS/Application.swift b/WireGuard/WireGuard/UI/macOS/Application.swift
index 9f7b810..fba0ac6 100644
--- a/WireGuard/WireGuard/UI/macOS/Application.swift
+++ b/WireGuard/WireGuard/UI/macOS/Application.swift
@@ -3,15 +3,45 @@
import Cocoa
-var appDelegate: AppDelegate?
-
class Application: NSApplication {
+
+ private let editorCommands = [
+ "x": #selector(NSText.cut(_:)),
+ "c": #selector(NSText.copy(_:)),
+ "v": #selector(NSText.paste(_:)),
+ "z": #selector(UndoActionRespondable.undo(_:)),
+ "a": #selector(NSResponder.selectAll(_:)),
+ "Z": #selector(UndoActionRespondable.redo(_:))
+ ]
+
+ private var appDelegate: AppDelegate? //swiftlint:disable:this weak_delegate
+
// We use a custom Application class to be able to set the app delegate
// before app.run() gets called in NSApplicationMain().
- override class var shared: NSApplication {
- let app = NSApplication.shared
+ override init() {
+ super.init()
appDelegate = AppDelegate() // Keep a strong reference to the app delegate
- app.delegate = appDelegate
- return app
+ delegate = appDelegate
+ }
+
+ required init?(coder: NSCoder) {
+ fatalError("init(coder:) has not been implemented")
}
+
+ override func sendEvent(_ event: NSEvent) {
+ let modifierFlags = event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue
+
+ if event.type == .keyDown,
+ (modifierFlags == NSEvent.ModifierFlags.command.rawValue || modifierFlags == NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue),
+ let selector = editorCommands[event.charactersIgnoringModifiers ?? ""] {
+ sendAction(selector, to: nil, from: self)
+ } else {
+ super.sendEvent(event)
+ }
+ }
+}
+
+@objc protocol UndoActionRespondable {
+ func undo(_ sender: AnyObject)
+ func redo(_ sender: AnyObject)
}
diff --git a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift
index a8a913f..0f5d665 100644
--- a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift
+++ b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift
@@ -10,8 +10,8 @@ class StatusMenu: NSMenu {
var statusMenuItem: NSMenuItem?
var networksMenuItem: NSMenuItem?
- var firstTunnelMenuItemIndex: Int = 0
- var numberOfTunnelMenuItems: Int = 0
+ var firstTunnelMenuItemIndex = 0
+ var numberOfTunnelMenuItems = 0
var manageTunnelsRootVC: ManageTunnelsRootViewController?
lazy var manageTunnelsWindow: NSWindow = {
@@ -62,6 +62,7 @@ class StatusMenu: NSMenu {
}
@discardableResult
+ //swiftlint:disable:next cyclomatic_complexity
func updateStatusMenuItems(with tunnel: TunnelContainer, ignoreInactive: Bool) -> Bool {
guard let statusMenuItem = statusMenuItem, let networksMenuItem = networksMenuItem else { return false }
var statusText: String
diff --git a/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift b/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift
index 5ed3e68..4678cc3 100644
--- a/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift
+++ b/WireGuard/WireGuard/UI/macOS/View/ConfTextStorage.swift
@@ -43,6 +43,7 @@ class ConfTextStorage: NSTextStorage {
fatalError("init(pasteboardPropertyList:ofType:) has not been implemented")
}
+ //swiftlint:disable:next function_body_length
func updateAttributes(for theme: TextColorTheme) {
self.defaultAttributes = [
.foregroundColor: theme.plainText,