fix: custom shortcuts can use arrow keys (closes #1376)

This commit is contained in:
Louis Pontoise committed 2022-05-01 00:31:13 +09:00
1 parent 254f238f82
commit bb1de75128
3 files changed
+16 -7

No files matched your search

+1 -1
View File
@@ -38,7 +38,7 @@ They helped [localize the app](https://poeditor.com/join/project/8AOEZ0eAZE):
* Albert Abdilim
* Ali Gokmen
* Allen Guan
* Anurag
* Anurag Roy
* anushree b
* Arthur
* Ash
@@ -49,11 +49,12 @@ class CustomRecorderControl: RecorderControl, RecorderControlDelegate {
}
func alertIfSameShortcutAlreadyAssigned(_ shortcut: Shortcut, _ shortcutAlreadyAssigned: ATShortcut) {
let existing = ControlsTab.shortcutControls[shortcutAlreadyAssigned.id]!
let isArrowKeys = ["←", "→", "↑", "↓"].contains(shortcutAlreadyAssigned.id)
let existing = ControlsTab.shortcutControls[shortcutAlreadyAssigned.id]
let alert = NSAlert()
alert.alertStyle = .critical
alert.messageText = NSLocalizedString("Conflicting shortcut", comment: "")
alert.informativeText = String(format: NSLocalizedString("Shortcut already assigned to another action: %@", comment: ""), existing.1.replacingOccurrences(of: " ", with: "\u{00A0}"))
alert.informativeText = String(format: NSLocalizedString("Shortcut already assigned to another action: %@", comment: ""), (isArrowKeys ? "Arrow keys" : existing!.1).replacingOccurrences(of: " ", with: "\u{00A0}"))
if !id.starts(with: "holdShortcut") {
alert.addButton(withTitle: NSLocalizedString("Unassign existing shortcut and continue", comment: "")).setAccessibilityFocused(true)
}
@@ -64,9 +65,15 @@ class CustomRecorderControl: RecorderControl, RecorderControlDelegate {
}
let userChoice = alert.runModal()
if !id.starts(with: "holdShortcut") && userChoice == .alertFirstButtonReturn {
existing.0.objectValue = nil
ControlsTab.shortcutChangedCallback(existing.0)
LabelAndControl.controlWasChanged(existing.0, shortcutAlreadyAssigned.id)
if isArrowKeys {
ControlsTab.arrowKeysCheckbox.state = .off
ControlsTab.arrowKeysEnabledCallback(ControlsTab.arrowKeysCheckbox)
LabelAndControl.controlWasChanged(ControlsTab.arrowKeysCheckbox, nil)
} else {
existing!.0.objectValue = nil
ControlsTab.shortcutChangedCallback(existing!.0)
LabelAndControl.controlWasChanged(existing!.0, shortcutAlreadyAssigned.id)
}
ControlsTab.shortcutControls[id]!.0.objectValue = shortcut
ControlsTab.shortcutChangedCallback(self)
LabelAndControl.controlWasChanged(self, id)
@@ -21,6 +21,7 @@ class ControlsTab {
"quitAppShortcut": { App.app.quitSelectedApp() },
"hideShowAppShortcut": { App.app.hideShowSelectedApp() },
]
static var arrowKeysCheckbox: NSButton!
static func initTab() -> NSView {
let focusWindowShortcut = LabelAndControl.makeLabelWithRecorder(NSLocalizedString("Focus selected window", comment: ""), "focusWindowShortcut", Preferences.focusWindowShortcut, labelPosition: .right)
@@ -31,6 +32,7 @@ class ControlsTab {
let quitAppShortcut = LabelAndControl.makeLabelWithRecorder(NSLocalizedString("Quit app", comment: ""), "quitAppShortcut", Preferences.quitAppShortcut, labelPosition: .right)
let hideShowAppShortcut = LabelAndControl.makeLabelWithRecorder(NSLocalizedString("Hide/Show app", comment: ""), "hideShowAppShortcut", Preferences.hideShowAppShortcut, labelPosition: .right)
let enableArrows = LabelAndControl.makeLabelWithCheckbox(NSLocalizedString("Arrow keys", comment: ""), "arrowKeysEnabled", extraAction: ControlsTab.arrowKeysEnabledCallback, labelPosition: .right)
arrowKeysCheckbox = enableArrows[0] as! NSButton
let enableMouse = LabelAndControl.makeLabelWithCheckbox(NSLocalizedString("Mouse hover", comment: ""), "mouseHoverEnabled", labelPosition: .right)
let enableCursorFollowFocus = LabelAndControl.makeLabelWithCheckbox(NSLocalizedString("Cursor follows focus", comment: ""), "cursorFollowFocusEnabled", labelPosition: .right)
let selectWindowcheckboxesExplanations = LabelAndControl.makeLabel(NSLocalizedString("Also select windows using:", comment: ""))
@@ -43,7 +45,7 @@ class ControlsTab {
let (holdShortcut2, nextWindowShortcut2, tab2View) = toShowSection("2")
let tabView = TabView([(NSLocalizedString("Shortcut 1", comment: ""), tab1View), (NSLocalizedString("Shortcut 2", comment: ""), tab2View)])
ControlsTab.arrowKeysEnabledCallback(enableArrows[0] as! NSControl)
ControlsTab.arrowKeysEnabledCallback(arrowKeysCheckbox)
// trigger shortcutChanged for these shortcuts to trigger .restrictModifiers
[holdShortcut, holdShortcut2].forEach { ControlsTab.shortcutChangedCallback($0[1] as! NSControl) }
[nextWindowShortcut, nextWindowShortcut2].forEach { ControlsTab.shortcutChangedCallback($0[0] as! NSControl) }