mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUAC-862: Add keysym to all KeyEvents. Move keysym determination logic to KeydownEvent/KeyupEvent/KeypressEvent.
This commit is contained in:
@@ -88,6 +88,15 @@ Guacamole.Keyboard = function(element) {
|
|||||||
*/
|
*/
|
||||||
this.defaultPrevented = false;
|
this.defaultPrevented = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The keysym of the key associated with this key event, as determined
|
||||||
|
* by a best-effort guess using available event properties and keyboard
|
||||||
|
* state.
|
||||||
|
*
|
||||||
|
* @type Number
|
||||||
|
*/
|
||||||
|
this.keysym = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of milliseconds elapsed since this event was
|
* Returns the number of milliseconds elapsed since this event was
|
||||||
* received.
|
* received.
|
||||||
@@ -156,6 +165,22 @@ Guacamole.Keyboard = function(element) {
|
|||||||
*/
|
*/
|
||||||
this.location = location;
|
this.location = location;
|
||||||
|
|
||||||
|
// If key is known from keyCode or DOM3 alone, use that
|
||||||
|
this.keysym = keysym_from_key_identifier(key, location)
|
||||||
|
|| keysym_from_keycode(keyCode, location);
|
||||||
|
|
||||||
|
// We must use the (potentially buggy) keyIdentifier immediately if
|
||||||
|
// keypress will likely not fire, as we need to make a best effort
|
||||||
|
// to prevent default if requested
|
||||||
|
if (guac_keyboard.modifiers.ctrl
|
||||||
|
|| guac_keyboard.modifiers.alt
|
||||||
|
|| guac_keyboard.modifiers.meta
|
||||||
|
|| guac_keyboard.modifiers.hyper)
|
||||||
|
this.keysym = this.keysym || keysym_from_key_identifier(keyIdentifier, location, guac_keyboard.modifiers.shift);
|
||||||
|
|
||||||
|
// Record most recently known keysym by associated key code
|
||||||
|
recentKeysym[keyCode] = this.keysym;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
KeydownEvent.prototype = new KeyEvent();
|
KeydownEvent.prototype = new KeyEvent();
|
||||||
@@ -184,6 +209,9 @@ Guacamole.Keyboard = function(element) {
|
|||||||
*/
|
*/
|
||||||
this.charCode = charCode;
|
this.charCode = charCode;
|
||||||
|
|
||||||
|
// Pull keysym from char code
|
||||||
|
this.keysym = keysym_from_charcode(charCode);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
KeypressEvent.prototype = new KeyEvent();
|
KeypressEvent.prototype = new KeyEvent();
|
||||||
@@ -243,6 +271,11 @@ Guacamole.Keyboard = function(element) {
|
|||||||
*/
|
*/
|
||||||
this.location = location;
|
this.location = location;
|
||||||
|
|
||||||
|
// If key is known from keyCode or DOM3 alone, use that
|
||||||
|
this.keysym = keysym_from_key_identifier(key, location)
|
||||||
|
|| keysym_from_keycode(keyCode, location)
|
||||||
|
|| recentKeysym[keyCode];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
KeyupEvent.prototype = new KeyEvent();
|
KeyupEvent.prototype = new KeyEvent();
|
||||||
@@ -769,21 +802,7 @@ Guacamole.Keyboard = function(element) {
|
|||||||
// Keydown event
|
// Keydown event
|
||||||
if (first instanceof KeydownEvent) {
|
if (first instanceof KeydownEvent) {
|
||||||
|
|
||||||
var keysym;
|
var keysym = first.keysym;
|
||||||
|
|
||||||
// If key is known from keyCode or DOM3 alone, use that
|
|
||||||
keysym = keysym_from_key_identifier(first.key, first.location)
|
|
||||||
|| keysym_from_keycode(first.keyCode, first.location);
|
|
||||||
|
|
||||||
// We must use the (potentially buggy) keyIdentifier immediately if
|
|
||||||
// keypress will likely not fire, as we need to make a best effort
|
|
||||||
// to prevent default if requested
|
|
||||||
if (guac_keyboard.modifiers.ctrl
|
|
||||||
|| guac_keyboard.modifiers.alt
|
|
||||||
|| guac_keyboard.modifiers.meta
|
|
||||||
|| guac_keyboard.modifiers.hyper)
|
|
||||||
keysym = keysym || keysym_from_key_identifier(first.keyIdentifier, first.location, guac_keyboard.modifiers.shift);
|
|
||||||
|
|
||||||
if (keysym) {
|
if (keysym) {
|
||||||
recentKeysym[first.keyCode] = keysym;
|
recentKeysym[first.keyCode] = keysym;
|
||||||
first.defaultPrevented = !press_key(keysym);
|
first.defaultPrevented = !press_key(keysym);
|
||||||
@@ -794,7 +813,7 @@ Guacamole.Keyboard = function(element) {
|
|||||||
var next = eventLog[1];
|
var next = eventLog[1];
|
||||||
if (next && next instanceof KeypressEvent) {
|
if (next && next instanceof KeypressEvent) {
|
||||||
|
|
||||||
keysym = keysym_from_charcode(next.charCode);
|
keysym = next.keysym;
|
||||||
if (keysym) {
|
if (keysym) {
|
||||||
recentKeysym[first.keyCode] = keysym;
|
recentKeysym[first.keyCode] = keysym;
|
||||||
first.defaultPrevented = next.defaultPrevented = !press_key(keysym);
|
first.defaultPrevented = next.defaultPrevented = !press_key(keysym);
|
||||||
@@ -822,10 +841,7 @@ Guacamole.Keyboard = function(element) {
|
|||||||
// Keyup event
|
// Keyup event
|
||||||
else if (first instanceof KeyupEvent) {
|
else if (first instanceof KeyupEvent) {
|
||||||
|
|
||||||
// If key is known from keyCode or DOM3 alone, use that
|
var keysym = first.keysym;
|
||||||
var keysym = keysym_from_key_identifier(first.key, first.location)
|
|
||||||
|| keysym_from_keycode(first.keyCode, first.location)
|
|
||||||
|| recentKeysym[first.keyCode];
|
|
||||||
if (keysym) {
|
if (keysym) {
|
||||||
release_key(keysym);
|
release_key(keysym);
|
||||||
first.defaultPrevented = true;
|
first.defaultPrevented = true;
|
||||||
|
Reference in New Issue
Block a user