Remove QEMU key event handler
The normal event handler provides all the necessary information now, so it is no longer needed.
This commit is contained in:
parent
d0703d1bde
commit
a784a9cabc
|
@ -54,14 +54,6 @@ Keyboard.prototype = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setQEMUVNCKeyboardHandler: function () {
|
|
||||||
this._handler = new KeyboardUtil.QEMUKeyEventDecoder(KeyboardUtil.ModifierSync(),
|
|
||||||
KeyboardUtil.TrackQEMUKeyState(
|
|
||||||
this._handleRfbEvent.bind(this)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleKeyDown: function (e) {
|
_handleKeyDown: function (e) {
|
||||||
if (!this._focused) { return; }
|
if (!this._focused) { return; }
|
||||||
|
|
||||||
|
|
|
@ -257,134 +257,6 @@ export function getKeysym(evt){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function QEMUKeyEventDecoder (modifierState, next) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
function sendAll(evts) {
|
|
||||||
for (var i = 0; i < evts.length; ++i) {
|
|
||||||
next(evts[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var numPadCodes = ["Numpad0", "Numpad1", "Numpad2",
|
|
||||||
"Numpad3", "Numpad4", "Numpad5", "Numpad6",
|
|
||||||
"Numpad7", "Numpad8", "Numpad9", "NumpadDecimal"];
|
|
||||||
|
|
||||||
var numLockOnKeySyms = {
|
|
||||||
"Numpad0": 0xffb0, "Numpad1": 0xffb1, "Numpad2": 0xffb2,
|
|
||||||
"Numpad3": 0xffb3, "Numpad4": 0xffb4, "Numpad5": 0xffb5,
|
|
||||||
"Numpad6": 0xffb6, "Numpad7": 0xffb7, "Numpad8": 0xffb8,
|
|
||||||
"Numpad9": 0xffb9, "NumpadDecimal": 0xffac
|
|
||||||
};
|
|
||||||
|
|
||||||
var numLockOnKeyCodes = [96, 97, 98, 99, 100, 101, 102,
|
|
||||||
103, 104, 105, 108, 110];
|
|
||||||
|
|
||||||
function isNumPadMultiKey(evt) {
|
|
||||||
return (numPadCodes.indexOf(evt.code) !== -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getNumPadKeySym(evt) {
|
|
||||||
if (numLockOnKeyCodes.indexOf(evt.keyCode) !== -1) {
|
|
||||||
return numLockOnKeySyms[evt.code];
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function process(evt, type) {
|
|
||||||
var result = {type: type};
|
|
||||||
result.code = getKeycode(evt);
|
|
||||||
result.keysym = 0;
|
|
||||||
|
|
||||||
if (isNumPadMultiKey(evt)) {
|
|
||||||
result.keysym = getNumPadKeySym(evt);
|
|
||||||
}
|
|
||||||
|
|
||||||
var suppress = type !== 'keydown' || !!getKeysym(evt);
|
|
||||||
|
|
||||||
next(result);
|
|
||||||
return suppress;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
keydown: function(evt) {
|
|
||||||
sendAll(modifierState.keydown(evt));
|
|
||||||
return process(evt, 'keydown');
|
|
||||||
},
|
|
||||||
keypress: function(evt) {
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
keyup: function(evt) {
|
|
||||||
sendAll(modifierState.keyup(evt));
|
|
||||||
return process(evt, 'keyup');
|
|
||||||
},
|
|
||||||
syncModifiers: function(evt) {
|
|
||||||
sendAll(modifierState.syncAny(evt));
|
|
||||||
},
|
|
||||||
releaseAll: function() { next({type: 'releaseall'}); }
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export function TrackQEMUKeyState (next) {
|
|
||||||
"use strict";
|
|
||||||
var state = [];
|
|
||||||
|
|
||||||
return function (evt) {
|
|
||||||
var last = state.length !== 0 ? state[state.length-1] : null;
|
|
||||||
|
|
||||||
switch (evt.type) {
|
|
||||||
case 'keydown':
|
|
||||||
|
|
||||||
if (!last || last.code !== evt.code) {
|
|
||||||
last = {code: evt.code};
|
|
||||||
|
|
||||||
if (state.length > 0 && state[state.length-1].code == 'ControlLeft') {
|
|
||||||
if (evt.code !== 'AltRight') {
|
|
||||||
next({code: 'ControlLeft', type: 'keydown', keysym: 0});
|
|
||||||
} else {
|
|
||||||
state.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
state.push(last);
|
|
||||||
}
|
|
||||||
if (evt.code !== 'ControlLeft') {
|
|
||||||
next(evt);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'keyup':
|
|
||||||
if (state.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var idx = null;
|
|
||||||
// do we have a matching key tracked as being down?
|
|
||||||
for (var i = 0; i !== state.length; ++i) {
|
|
||||||
if (state[i].code === evt.code) {
|
|
||||||
idx = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if we couldn't find a match (it happens), assume it was the last key pressed
|
|
||||||
if (idx === null) {
|
|
||||||
if (evt.code === 'ControlLeft') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
idx = state.length - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
state.splice(idx, 1);
|
|
||||||
next(evt);
|
|
||||||
break;
|
|
||||||
case 'releaseall':
|
|
||||||
/* jshint shadow: true */
|
|
||||||
for (var i = 0; i < state.length; ++i) {
|
|
||||||
next({code: state[i].code, keysym: 0, type: 'keyup'});
|
|
||||||
}
|
|
||||||
/* jshint shadow: false */
|
|
||||||
state = [];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// Takes a DOM keyboard event and:
|
// Takes a DOM keyboard event and:
|
||||||
// - determines which keysym it represents
|
// - determines which keysym it represents
|
||||||
// - determines a code identifying the key that was pressed (corresponding to the code/keyCode properties on the DOM event)
|
// - determines a code identifying the key that was pressed (corresponding to the code/keyCode properties on the DOM event)
|
||||||
|
|
|
@ -2464,7 +2464,6 @@ RFB.encodingHandlers = {
|
||||||
var keyboardEvent = document.createEvent("keyboardEvent");
|
var keyboardEvent = document.createEvent("keyboardEvent");
|
||||||
if (keyboardEvent.code !== undefined) {
|
if (keyboardEvent.code !== undefined) {
|
||||||
this._qemuExtKeyEventSupported = true;
|
this._qemuExtKeyEventSupported = true;
|
||||||
this._keyboard.setQEMUVNCKeyboardHandler();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue