summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2019-11-01 09:59:02 +0100
committerPierre Ossman <ossman@cendio.se>2019-11-01 09:59:02 +0100
commit5736ea0bd50db477ac501ffc016b0b4ca3268543 (patch)
tree2db5c485abd09c7575dc25cdffd8ee33b9568cab
parent94a01b0ae0b735c2da794e7870bf972a68fece69 (diff)
downloadnovnc-5736ea0bd50db477ac501ffc016b0b4ca3268543.tar.gz
Fix AltGr for a few more keys in IE and Edge
Some keys apparently send 'Unidentified' rather than an unshifted value. Make sure those are also handled. Examples are \ and | on a Swedish keyboard.
-rw-r--r--core/input/util.js13
-rw-r--r--tests/test.helper.js10
2 files changed, 20 insertions, 3 deletions
diff --git a/core/input/util.js b/core/input/util.js
index b0e8855..d93aafa 100644
--- a/core/input/util.js
+++ b/core/input/util.js
@@ -108,9 +108,16 @@ export function getKey(evt) {
return 'Delete';
}
- // IE and Edge have broken handling of AltGraph so we cannot
- // trust them for printable characters
- if ((evt.key.length !== 1) || (!browser.isIE() && !browser.isEdge())) {
+ // IE and Edge need special handling, but for everyone else we
+ // can trust the value provided
+ if (!browser.isIE() && !browser.isEdge()) {
+ return evt.key;
+ }
+
+ // IE and Edge have broken handling of AltGraph so we can only
+ // trust them for non-printable characters (and unfortunately
+ // they also specify 'Unidentified' for some problem keys)
+ if ((evt.key.length !== 1) && (evt.key !== 'Unidentified')) {
return evt.key;
}
}
diff --git a/tests/test.helper.js b/tests/test.helper.js
index 70eba1b..7d4b011 100644
--- a/tests/test.helper.js
+++ b/tests/test.helper.js
@@ -169,6 +169,16 @@ describe('Helpers', function () {
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
expect(KeyboardUtil.getKey({key: 'Shift'})).to.be.equal('Shift');
});
+ it('should allow printable character key with charCode on IE', function () {
+ window.navigator.userAgent = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
+ expect(KeyboardUtil.getKey({key: 'a', charCode: 0x61})).to.be.equal('a');
+ expect(KeyboardUtil.getKey({key: 'Unidentified', charCode: 0x61})).to.be.equal('a');
+ });
+ it('should allow printable character key with charCode on Edge', function () {
+ window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393";
+ expect(KeyboardUtil.getKey({key: 'a', charCode: 0x61})).to.be.equal('a');
+ expect(KeyboardUtil.getKey({key: 'Unidentified', charCode: 0x61})).to.be.equal('a');
+ });
});
});