class Application: NSApplication {
- private let characterKeyCommands = [
- "x": #selector(NSText.cut(_:)),
- "c": #selector(NSText.copy(_:)),
- "v": #selector(NSText.paste(_:)),
- "z": #selector(UndoActionRespondable.undo(_:)),
- "a": #selector(NSResponder.selectAll(_:)),
- "Z": #selector(UndoActionRespondable.redo(_:)),
- "w": #selector(NSWindow.performClose(_:)),
- "m": #selector(NSWindow.performMiniaturize(_:)),
- "q": #selector(AppDelegate.quit)
- ]
-
private var appDelegate: AppDelegate? //swiftlint:disable:this weak_delegate
override init() {
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 = characterKeyCommands[event.charactersIgnoringModifiers ?? ""] {
- sendAction(selector, to: nil, from: self)
- } else {
- super.sendEvent(event)
- }
- }
-}
-
-@objc protocol UndoActionRespondable {
- func undo(_ sender: AnyObject)
- func redo(_ sender: AnyObject)
}
self.tunnelDetailVC = nil
}
}
-
-extension ManageTunnelsRootViewController {
- override func keyDown(with event: NSEvent) {
- let modifierFlags = event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue
- let isCmdOrCmdShiftDown = (modifierFlags == NSEvent.ModifierFlags.command.rawValue || modifierFlags == NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue)
-
- if event.specialKey == .delete {
- tunnelsListVC?.handleRemoveTunnelAction()
- } else if isCmdOrCmdShiftDown {
- switch event.charactersIgnoringModifiers {
- case "n":
- tunnelsListVC?.handleAddEmptyTunnelAction()
- case "o":
- tunnelsListVC?.handleImportTunnelAction()
- case "t":
- tunnelDetailVC?.handleToggleActiveStatusAction()
- case "e":
- tunnelDetailVC?.handleEditTunnelAction()
- default:
- break
- }
- }
- }
-}