Send keyboard events from single place

This makes it easier to handle any needed variations, like different
types of messages.
This commit is contained in:
Pierre Ossman
2017-01-26 17:59:25 +01:00
parent f714f7deae
commit 94f5cf05f3
3 changed files with 51 additions and 36 deletions
+31 -26
View File
@@ -298,12 +298,13 @@ RFB.prototype = {
if (this._rfb_connection_state !== 'connected' || this._view_only) { return false; }
Log.Info("Sending Ctrl-Alt-Del");
RFB.messages.keyEvent(this._sock, KeyTable.XK_Control_L, 1);
RFB.messages.keyEvent(this._sock, KeyTable.XK_Alt_L, 1);
RFB.messages.keyEvent(this._sock, KeyTable.XK_Delete, 1);
RFB.messages.keyEvent(this._sock, KeyTable.XK_Delete, 0);
RFB.messages.keyEvent(this._sock, KeyTable.XK_Alt_L, 0);
RFB.messages.keyEvent(this._sock, KeyTable.XK_Control_L, 0);
this.sendKey(KeyTable.XK_Control_L, "ControlLeft", true);
this.sendKey(KeyTable.XK_Alt_L, "AltLeft", true);
this.sendKey(KeyTable.XK_Delete, "Delete", true);
this.sendKey(KeyTable.XK_Delete, "Delete", false);
this.sendKey(KeyTable.XK_Alt_L, "AltLeft", false);
this.sendKey(KeyTable.XK_Control_L, "ControlLeft", false);
return true;
},
@@ -328,16 +329,33 @@ RFB.prototype = {
// Send a key press. If 'down' is not specified then send a down key
// followed by an up key.
sendKey: function (keysym, down) {
sendKey: function (keysym, code, down) {
if (this._rfb_connection_state !== 'connected' || this._view_only) { return false; }
if (typeof down !== 'undefined') {
if (down === undefined) {
this.sendKey(keysym, code, true);
this.sendKey(keysym, code, false);
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;
}
Log.Info("Sending key (" + (down ? "down" : "up") + "): keysym " + keysym + ", scancode " + scancode);
RFB.messages.QEMUExtendedKeyEvent(this._sock, keysym, down, scancode);
} else {
Log.Info("Sending keysym (" + (down ? "down" : "up") + "): " + keysym);
RFB.messages.keyEvent(this._sock, keysym, down ? 1 : 0);
} else {
Log.Info("Sending keysym (down + up): " + keysym);
RFB.messages.keyEvent(this._sock, keysym, 1);
RFB.messages.keyEvent(this._sock, keysym, 0);
}
return true;
},
@@ -647,21 +665,8 @@ RFB.prototype = {
},
_handleKeyPress: function (keyevent) {
if (this._view_only) { return; } // View only, skip keyboard, events
var down = (keyevent.type == 'keydown');
if (this._qemuExtKeyEventSupported) {
var scancode = XtScancode[keyevent.code];
if (scancode) {
var keysym = keyevent.keysym;
RFB.messages.QEMUExtendedKeyEvent(this._sock, keysym, down, scancode);
} else {
Log.Error('Unable to find a xt scancode for code = ' + keyevent.code);
}
} else {
keysym = keyevent.keysym;
RFB.messages.keyEvent(this._sock, keysym, down);
}
this.sendKey(keyevent.keysym, keyevent.code, down);
},
_handleMouseButton: function (x, y, down, bmask) {