feat: open providers with Command-P and dismiss pickers with Escape
This commit is contained in:
@@ -308,6 +308,9 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
|
||||
func handle(_ selector: Selector) -> Bool {
|
||||
switch selector {
|
||||
case #selector(NSResponder.cancelOperation(_:)):
|
||||
guard isShown else { return false }
|
||||
close()
|
||||
case #selector(NSResponder.insertNewline(_:)):
|
||||
if let selectedEntry { chooseAction(at: selectedEntry) }
|
||||
case #selector(NSResponder.moveUp(_:)): moveSelection(by: -1)
|
||||
|
||||
@@ -97,6 +97,7 @@ final class LauncherWindowController: NSWindowController, NSWindowDelegate, NSSe
|
||||
}
|
||||
window.usesTextNavigation = { [weak self] in self?.notes != nil }
|
||||
window.dismiss = { [weak self] in self?.dismiss() }
|
||||
window.escape = { [weak self] in self?.handleEscape() }
|
||||
window.canUseNumberShortcuts = { [weak self] in
|
||||
guard let self else { return false }
|
||||
return !self.isLaunching && self.calculation == nil && self.resultCount > 0
|
||||
@@ -115,8 +116,7 @@ final class LauncherWindowController: NSWindowController, NSWindowDelegate, NSSe
|
||||
actions.closed = { [weak self] in
|
||||
guard let self else { return }
|
||||
self.openButton.keyEquivalent = "\r"
|
||||
if NSApp.isActive { self.window?.makeFirstResponder(self.searchField) }
|
||||
else { self.dismiss(restoringFocus: false) }
|
||||
self.window?.makeFirstResponder(self.searchField)
|
||||
}
|
||||
currency.changed = { [weak self] in self?.updateResults(preservingSelection: true) }
|
||||
restorePosition()
|
||||
@@ -494,9 +494,15 @@ final class LauncherWindowController: NSWindowController, NSWindowDelegate, NSSe
|
||||
updateResults()
|
||||
}
|
||||
|
||||
private func handleEscape() {
|
||||
let selector = #selector(NSResponder.cancelOperation(_:))
|
||||
if actions.handle(selector) || translation?.handle(selector) == true || emojiPicker?.handle(selector) == true { return }
|
||||
dismiss()
|
||||
}
|
||||
|
||||
func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
|
||||
if commandSelector == #selector(NSResponder.cancelOperation(_:)) {
|
||||
dismiss()
|
||||
handleEscape()
|
||||
return true
|
||||
}
|
||||
if let emojiPicker { return emojiPicker.handle(commandSelector) }
|
||||
@@ -1163,6 +1169,7 @@ final class LauncherPanel: NSPanel {
|
||||
override var canBecomeMain: Bool { true }
|
||||
var navigateSelection: ((Int) -> Void)?
|
||||
var dismiss: (() -> Void)?
|
||||
var escape: (() -> Void)?
|
||||
var dragEnded: (() -> Void)?
|
||||
var canUseNumberShortcuts: (() -> Bool)?
|
||||
var numberHintsChanged: (() -> Void)?
|
||||
@@ -1293,7 +1300,7 @@ final class LauncherPanel: NSPanel {
|
||||
}
|
||||
|
||||
override func cancelOperation(_ sender: Any?) {
|
||||
dismiss?()
|
||||
if let escape { escape() } else { dismiss?() }
|
||||
}
|
||||
|
||||
override func performClose(_ sender: Any?) {
|
||||
|
||||
@@ -68,6 +68,9 @@ final class TranslationController: NSViewController {
|
||||
providerButton.setAccessibilityLabel("Translation provider")
|
||||
providerButton.target = self
|
||||
providerButton.action = #selector(showProviders)
|
||||
providerButton.keyEquivalent = "p"
|
||||
providerButton.keyEquivalentModifierMask = .command
|
||||
providerButton.toolTip = "Choose translation provider (Command-P)"
|
||||
providerButton.isBordered = false
|
||||
providerButton.font = .systemFont(ofSize: 12, weight: .medium)
|
||||
providerButton.contentTintColor = SunsetPalette.text
|
||||
|
||||
@@ -124,6 +124,7 @@ public final class GlobalShortcuts {
|
||||
case "z": return "Undo"
|
||||
case "m": return "Minimize"
|
||||
case "k": return "entry actions"
|
||||
case "p": return "translation provider selection"
|
||||
case "return", "enter": return "Open, Copy, Translate, or confirm uninstall"
|
||||
case "1"..."9" where key.utf8.count == 1: return "numbered application launching"
|
||||
default: break
|
||||
|
||||
Reference in New Issue
Block a user