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;
},
// 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;
},
},
_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) {