From f6a1d98a3a40a9f37c337d06420d277899a0a269 Mon Sep 17 00:00:00 2001 From: Jesper Dam Date: Mon, 6 Jan 2014 13:59:25 +0100 Subject: [PATCH] Fix issue #326: correct handling of shift key When shortcut modifiers (modifier keys such as CTRL, which do not participate in composing character input) are pressed, we try to suppress the keypress event, as browsers do not reliably generate it. This means that subsequent key events are decoded only based on the keydown event. Due to a type error (comparing a string to a number), shift was mistakenly treated as a shortcut modifier, preventing text input which relied on shift, such as _ and %, from being generated. --- include/keyboard.js | 2 +- tests/test.helper.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/keyboard.js b/include/keyboard.js index 623d5b29..f21f9767 100644 --- a/include/keyboard.js +++ b/include/keyboard.js @@ -31,7 +31,7 @@ var kbdUtil = (function() { function hasShortcutModifier(charModifier, currentModifiers) { var mods = {}; for (var key in currentModifiers) { - if (key !== 0xffe1) { + if (parseInt(key) !== 0xffe1) { mods[key] = currentModifiers[key]; } } diff --git a/tests/test.helper.js b/tests/test.helper.js index d6a68cd9..d9e8e144 100644 --- a/tests/test.helper.js +++ b/tests/test.helper.js @@ -248,5 +248,13 @@ describe('Helpers', function() { })).to.be.deep.equal([{keysym: keysyms.lookup(0xffe9), type: 'keydown'}]); }); }); + describe('do not treat shift as a modifier key', function() { + it('should not treat shift as a shortcut modifier', function() { + expect(kbdUtil.hasShortcutModifier([], {0xffe1 : true})).to.be.false; + }); + it('should not treat shift as a char modifier', function() { + expect(kbdUtil.hasCharModifier([], {0xffe1 : true})).to.be.false; + }); + }); }); });