Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,12 @@ extension azooKeyMacInputController {
},
completion: { [weak self] prompt in
self?.segmentsManager.appendDebugMessage("showPromptInputWindow: Window closed with prompt: \(prompt ?? "nil")")

// Restore focus on cancel (prompt == nil) here so every closing path including window-level Esc ends up restoring focus.
if prompt == nil, let app = currentApp {
app.activate(options: [])
self?.segmentsManager.appendDebugMessage("showPromptInputWindow: Restored focus to original app on cancel")
}
self?.isPromptWindowVisible = false
}
)
Expand Down
15 changes: 15 additions & 0 deletions azooKeyMac/Windows/PromptInput/CustomTextField.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ struct CustomTextField: NSViewRepresentable {
var onSubmit: () -> Void
var onDownArrow: () -> Void
var onUpArrow: () -> Void
var onCancel: () -> Void

func makeNSView(context: Context) -> NSTextField {
let textField = KeyHandlingTextField()
Expand All @@ -28,6 +29,7 @@ struct CustomTextField: NSViewRepresentable {
textField.onDownArrow = onDownArrow
textField.onUpArrow = onUpArrow
textField.onSubmit = onSubmit
textField.onCancel = onCancel

return textField
}
Expand All @@ -40,6 +42,7 @@ struct CustomTextField: NSViewRepresentable {
keyTextField.onDownArrow = onDownArrow
keyTextField.onUpArrow = onUpArrow
keyTextField.onSubmit = onSubmit
keyTextField.onCancel = onCancel
}

// Handle focus changes
Expand All @@ -65,6 +68,14 @@ struct CustomTextField: NSViewRepresentable {
parent.onSubmit()
}

func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
if commandSelector == #selector(NSResponder.cancelOperation(_:)) {
parent.onCancel()
return true
}
return false
}

func controlTextDidChange(_ obj: Notification) {
if let textField = obj.object as? NSTextField {
parent.text = textField.stringValue
Expand All @@ -85,6 +96,7 @@ private final class KeyHandlingTextField: NSTextField {
var onDownArrow: (() -> Void)?
var onUpArrow: (() -> Void)?
var onSubmit: (() -> Void)?
var onCancel: (() -> Void)?

override func awakeFromNib() {
super.awakeFromNib()
Expand Down Expand Up @@ -121,6 +133,9 @@ private final class KeyHandlingTextField: NSTextField {
case 36: // Return key
onSubmit?()
return
case 53: // Escape key
onCancel?()
return
default:
super.keyDown(with: event)
}
Expand Down
3 changes: 3 additions & 0 deletions azooKeyMac/Windows/PromptInput/PromptInputView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ struct PromptInputView: View {
onUpArrow: {
// Handle up arrow for history navigation
navigateHistory(direction: .up)
},
onCancel: {
onCancel()
}
)
.onChange(of: isTextFieldFocused) { isFocused in
Expand Down
7 changes: 0 additions & 7 deletions azooKeyMac/Windows/PromptInput/PromptInputWindow.swift
Original file line number Diff line number Diff line change
Expand Up @@ -166,13 +166,6 @@ final class PromptInputWindow: NSWindow {
completion(nil)
}

// Restore focus to the previous application
DispatchQueue.main.async {
if let previousApp = NSWorkspace.shared.frontmostApplication {
previousApp.activate(options: [])
}
}

super.close()
self.completion = nil
self.previewCallback = nil
Expand Down