mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Use timeout only as failsafe. Send key events immediately when we know we will handle via keypress or keydown.
This commit is contained in:
@@ -432,6 +432,8 @@ Guacamole.Keyboard = function(element) {
|
||||
return;
|
||||
}
|
||||
|
||||
var expect_keypress = true;
|
||||
|
||||
// Ctrl/Alt/Shift
|
||||
if (keynum == 16) guac_keyboard.modifiers.shift = true;
|
||||
else if (keynum == 17) guac_keyboard.modifiers.ctrl = true;
|
||||
@@ -442,7 +444,7 @@ Guacamole.Keyboard = function(element) {
|
||||
|
||||
// If key is known from keycode, prevent default
|
||||
if (keydown_keysym)
|
||||
e.preventDefault();
|
||||
expect_keypress = false;
|
||||
|
||||
// Also try to get get keysym from keyIdentifier
|
||||
if (e.keyIdentifier) {
|
||||
@@ -458,17 +460,25 @@ Guacamole.Keyboard = function(element) {
|
||||
if (!isTypable(e.keyIdentifier)
|
||||
|| ( guac_keyboard.modifiers.ctrl && !guac_keyboard.modifiers.alt)
|
||||
|| (!guac_keyboard.modifiers.ctrl && guac_keyboard.modifiers.alt))
|
||||
e.preventDefault();
|
||||
expect_keypress = false;
|
||||
|
||||
}
|
||||
|
||||
// Set keycode which will be associated with any future keypress
|
||||
keydown_code = keynum;
|
||||
|
||||
// Defer handling of event until after any other pending
|
||||
// key events.
|
||||
if (!deferred_keypress)
|
||||
deferred_keypress = window.setTimeout(handleKeyEvents, 0);
|
||||
// If we expect to handle via keypress, set failsafe timeout and
|
||||
// wait for keypress.
|
||||
if (expect_keypress) {
|
||||
if (!deferred_keypress)
|
||||
deferred_keypress = window.setTimeout(handleKeyEvents, 0);
|
||||
}
|
||||
|
||||
// Otherwise, handle now
|
||||
else {
|
||||
e.preventDefault();
|
||||
handleKeyEvents();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -493,10 +503,12 @@ Guacamole.Keyboard = function(element) {
|
||||
sendKeyReleased(0xFFE9);
|
||||
}
|
||||
|
||||
// Defer handling of event until after any other pending
|
||||
// key events.
|
||||
if (!deferred_keypress)
|
||||
deferred_keypress = window.setTimeout(handleKeyEvents, 0);
|
||||
// Clear timeout, if any
|
||||
if (deferred_keypress)
|
||||
window.clearTimeout(deferred_keypress);
|
||||
|
||||
// Handle event with all aggregated data
|
||||
handleKeyEvents();
|
||||
|
||||
};
|
||||
|
||||
@@ -512,27 +524,21 @@ Guacamole.Keyboard = function(element) {
|
||||
if (window.event) keynum = window.event.keyCode;
|
||||
else if (e.which) keynum = e.which;
|
||||
|
||||
// Defer handling of keyup (otherwise, keyup may happen before
|
||||
// deferred handling of keydown/keypress).
|
||||
window.setTimeout(function() {
|
||||
// Ctrl/Alt/Shift
|
||||
if (keynum == 16) guac_keyboard.modifiers.shift = false;
|
||||
else if (keynum == 17) guac_keyboard.modifiers.ctrl = false;
|
||||
else if (keynum == 18) guac_keyboard.modifiers.alt = false;
|
||||
else
|
||||
stopRepeat();
|
||||
|
||||
// Ctrl/Alt/Shift
|
||||
if (keynum == 16) guac_keyboard.modifiers.shift = false;
|
||||
else if (keynum == 17) guac_keyboard.modifiers.ctrl = false;
|
||||
else if (keynum == 18) guac_keyboard.modifiers.alt = false;
|
||||
else
|
||||
stopRepeat();
|
||||
// Get corresponding character
|
||||
var lastKeyDownChar = keydownChar[keynum];
|
||||
|
||||
// Get corresponding character
|
||||
var lastKeyDownChar = keydownChar[keynum];
|
||||
// Clear character record
|
||||
keydownChar[keynum] = null;
|
||||
|
||||
// Clear character record
|
||||
keydownChar[keynum] = null;
|
||||
|
||||
// Send release event
|
||||
sendKeyReleased(lastKeyDownChar);
|
||||
|
||||
}, 0);
|
||||
// Send release event
|
||||
sendKeyReleased(lastKeyDownChar);
|
||||
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user