From f44a50028e6fb65ffd44af247664e00a1197d3d5 Mon Sep 17 00:00:00 2001 From: Martin Paljak Date: Tue, 14 Jan 2025 10:06:18 +0200 Subject: [PATCH] Fix #8: allow changing the default button with keyboard in confirm mode. --- ssh-askpass/ViewController.swift | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/ssh-askpass/ViewController.swift b/ssh-askpass/ViewController.swift index ac2f5cf..1274fcb 100644 --- a/ssh-askpass/ViewController.swift +++ b/ssh-askpass/ViewController.swift @@ -48,13 +48,32 @@ class ViewController: NSViewController { // set first responder to allow closing window with escape key switch self.sshAskpass.type { case .confirmation, .information: - if let window = self.view.window { - window.makeFirstResponder(cancelButton) - } + self.view.window?.makeFirstResponder(cancelButton) default: break // passwordTextField is first responder by default } } + // Handle tab key, even if navigation disabled in settings. + override func keyDown(with event: NSEvent) { + let switchers: [UInt16] = [48, 123, 124] // tab, left arrow, right arrow + guard switchers.contains(event.keyCode) else { + super.keyDown(with: event) + return + } + + if (self.sshAskpass.type == .confirmation) { + if self.view.window?.firstResponder === cancelButton { + self.view.window?.makeFirstResponder(okButton) + cancelButton.keyEquivalent = "" + okButton.keyEquivalent = "\r" + } else { + self.view.window?.makeFirstResponder(cancelButton) + okButton.keyEquivalent = "" + cancelButton.keyEquivalent = "\r" + } + } + } + override func viewDidLoad() { super.viewDidLoad()