diff options
author | Pierre Ossman <ossman@cendio.se> | 2017-07-07 15:06:13 +0200 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2017-07-07 15:06:13 +0200 |
commit | be70fe0a3d94a209b369cd3443974e5ec05df551 (patch) | |
tree | 32fc7abec576897e45eabd3ed1325c90a0b6b998 | |
parent | 4093c37f28d57424554100150bdf5c90e1959ff5 (diff) | |
download | novnc-be70fe0a3d94a209b369cd3443974e5ec05df551.tar.gz |
Only send QEMU Extended Key Event if we have a scan code
Servers will assume that a scan code is present if this message type
is used, so fall back to the standard key event message if we don't
know the scan code.
-rw-r--r-- | core/rfb.js | 11 | ||||
-rw-r--r-- | tests/test.rfb.js | 8 |
2 files changed, 10 insertions, 9 deletions
diff --git a/core/rfb.js b/core/rfb.js index 968cd40..4def709 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -335,16 +335,9 @@ RFB.prototype = { return true; } - if (this._qemuExtKeyEventSupported) { - var scancode = XtScancode[code]; - - if (scancode === undefined) { - Log.Error('Unable to find a xt scancode for code: ' + code); - // FIXME: not in the spec, but this is what - // gtk-vnc does - scancode = 0; - } + var scancode = XtScancode[code]; + if (this._qemuExtKeyEventSupported && scancode) { // 0 is NoSymbol keysym = keysym || 0; diff --git a/tests/test.rfb.js b/tests/test.rfb.js index b39f52e..99b93b5 100644 --- a/tests/test.rfb.js +++ b/tests/test.rfb.js @@ -224,6 +224,14 @@ describe('Remote Frame Buffer Protocol Client', function() { client.sendKey(0x20, 'Space', true); expect(client._sock).to.have.sent(expected._sQ); }); + + it('should not send QEMU extended events if unknown key code', function () { + client._qemuExtKeyEventSupported = true; + var expected = {_sQ: new Uint8Array(8), _sQlen: 0, flush: function () {}}; + RFB.messages.keyEvent(expected, 123, 1); + client.sendKey(123, 'FooBar', true); + expect(client._sock).to.have.sent(expected._sQ); + }); }); describe('#clipboardPasteFrom', function () { |