summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <pierre@ossman.eu>2016-10-14 08:39:28 +0200
committerPierre Ossman <pierre@ossman.eu>2016-10-15 14:58:55 +0200
commit115eedf69c465548a44eab1b2a6492546b2ed6e1 (patch)
tree08d0ee296c71228db435546859e01473a342eb62
parent4dc8953658840c2aef1c3c3029e0b0e3486af606 (diff)
downloadnovnc-115eedf69c465548a44eab1b2a6492546b2ed6e1.tar.gz
Use Unicode keysym range as fallback
Not all Unicode codepoints have an equivalent named Keysym. But there is a range in the Keysym namespace that can be used to map any codepoint to.
-rw-r--r--core/input/keysymdef.js8
-rw-r--r--core/input/util.js5
-rw-r--r--tests/test.helper.js6
-rw-r--r--utils/parse.js8
4 files changed, 18 insertions, 9 deletions
diff --git a/core/input/keysymdef.js b/core/input/keysymdef.js
index f45d9d9..c4d0ace 100644
--- a/core/input/keysymdef.js
+++ b/core/input/keysymdef.js
@@ -10,7 +10,13 @@ var keysyms = (function(){
function lookup(k) { return k ? {keysym: k, keyname: keynames ? keynames[k] : k} : undefined; }
return {
- fromUnicode : function(u) { return lookup(codepoints[u]); },
+ fromUnicode : function(u) {
+ var keysym = codepoints[u];
+ if (keysym === undefined) {
+ keysym = 0x01000000 | u;
+ }
+ return lookup(keysym);
+ },
lookup : lookup
};
})();
diff --git a/core/input/util.js b/core/input/util.js
index efdcced..52b3128 100644
--- a/core/input/util.js
+++ b/core/input/util.js
@@ -184,10 +184,7 @@ var KeyboardUtil = {};
codepoint = evt.keyCode;
}
if (codepoint) {
- var res = keysyms.fromUnicode(substituteCodepoint(codepoint));
- if (res) {
- return res;
- }
+ return keysyms.fromUnicode(substituteCodepoint(codepoint));
}
// we could check evt.key here.
// Legal values are defined in http://www.w3.org/TR/DOM-Level-3-Events/#key-values-list,
diff --git a/tests/test.helper.js b/tests/test.helper.js
index 4982535..0c68b16 100644
--- a/tests/test.helper.js
+++ b/tests/test.helper.js
@@ -38,9 +38,9 @@ describe('Helpers', function() {
it('should map characters which aren\'t in Latin1 *or* Windows-1252 to keysyms', function() {
expect(keysyms.fromUnicode('ลต'.charCodeAt())).to.have.property('keysym', 0x1000175);
});
- it('should return undefined for unknown codepoints', function() {
- expect(keysyms.fromUnicode('\n'.charCodeAt())).to.be.undefined;
- expect(keysyms.fromUnicode('\u1F686'.charCodeAt())).to.be.undefined;
+ it('should map unknown codepoints to the Unicode range', function() {
+ expect(keysyms.fromUnicode('\n'.charCodeAt())).to.have.property('keysym', 0x100000a);
+ expect(keysyms.fromUnicode('\u{1F686}'.charCodeAt())).to.have.property('keysym', 0x101f686);
});
});
diff --git a/utils/parse.js b/utils/parse.js
index 02ac66c..fd79b12 100644
--- a/utils/parse.js
+++ b/utils/parse.js
@@ -87,7 +87,13 @@ var out = "// This file describes mappings from Unicode codepoints to the keysym
"\n" +
" function lookup(k) { return k ? {keysym: k, keyname: keynames ? keynames[k] : k} : undefined; }\n" +
" return {\n" +
-" fromUnicode : function(u) { return lookup(codepoints[u]); },\n" +
+" fromUnicode : function(u) {\n" +
+" var keysym = codepoints[u];\n" +
+" if (keysym === undefined) {\n" +
+" keysym = 0x01000000 | u;\n" +
+" }\n" +
+" return lookup(keysym);\n" +
+" },\n" +
" lookup : lookup\n" +
" };\n" +
"})();\n";