Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 4d51ac2

Browse files
maxbrunsfeldNathan Sobo
authored andcommitted
Prevent multi-modifier keystrokes from being enqueued
Signed-off-by: Nathan Sobo <nathan@github.com>
1 parent 4bc839d commit 4d51ac2

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

spec/keymap-manager-spec.coffee

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ describe "KeymapManager", ->
294294

295295
it "does not enqueue keydown events consisting only of modifier keys", ->
296296
element = $$ -> @div class: 'a'
297-
keymapManager.addKeymap 'test', '.a': 'ctrl-a ctrl-b': 'command'
297+
keymapManager.addKeymap 'test', '.a': 'ctrl-a ctrl-alt-b': 'command'
298298
events = []
299299
element.addEventListener 'command', -> events.push('command')
300300

@@ -303,7 +303,8 @@ describe "KeymapManager", ->
303303
keymapManager.handleKeyboardEvent(keydownEvent('ctrl', target: element))
304304
keymapManager.handleKeyboardEvent(keydownEvent('a', ctrl: true, target: element))
305305
keymapManager.handleKeyboardEvent(keydownEvent('ctrl', target: element))
306-
keymapManager.handleKeyboardEvent(keydownEvent('b', ctrl: true, target: element))
306+
keymapManager.handleKeyboardEvent(keydownEvent('alt', ctrl: true, target: element))
307+
keymapManager.handleKeyboardEvent(keydownEvent('b', ctrl: true, alt: true, target: element))
307308

308309
expect(events).toEqual ['command']
309310

src/helpers.coffee

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
AtomModifiers = new Set
55
AtomModifiers.add(modifier) for modifier in ['ctrl', 'alt', 'shift', 'cmd']
66

7+
AtomModifierRegex = /(ctrl|alt|shift|cmd)$/
8+
79
KeyboardEventModifiers = new Set
810
KeyboardEventModifiers.add(modifier) for modifier in ['Control', 'Alt', 'Shift', 'Meta']
911

@@ -147,8 +149,8 @@ exports.keystrokeForKeyboardEvent = (event, dvorakQwertyWorkaroundEnabled) ->
147149
exports.calculateSpecificity = (selector) ->
148150
SpecificityCache[selector] ?= specificity(selector)
149151

150-
exports.isAtomModifier = (key) ->
151-
AtomModifiers.has(key)
152+
exports.isAtomModifier = (keystroke) ->
153+
AtomModifiers.has(keystroke) or AtomModifierRegex.test(keystroke)
152154

153155
exports.keydownEvent = (key, {ctrl, shift, alt, cmd, keyCode, target, location}={}) ->
154156
event = document.createEvent('KeyboardEvent')

0 commit comments

Comments
 (0)