mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 13:41:21 +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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var expect_keypress = true;
|
||||||
|
|
||||||
// Ctrl/Alt/Shift
|
// Ctrl/Alt/Shift
|
||||||
if (keynum == 16) guac_keyboard.modifiers.shift = true;
|
if (keynum == 16) guac_keyboard.modifiers.shift = true;
|
||||||
else if (keynum == 17) guac_keyboard.modifiers.ctrl = 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 key is known from keycode, prevent default
|
||||||
if (keydown_keysym)
|
if (keydown_keysym)
|
||||||
e.preventDefault();
|
expect_keypress = false;
|
||||||
|
|
||||||
// Also try to get get keysym from keyIdentifier
|
// Also try to get get keysym from keyIdentifier
|
||||||
if (e.keyIdentifier) {
|
if (e.keyIdentifier) {
|
||||||
@@ -458,17 +460,25 @@ Guacamole.Keyboard = function(element) {
|
|||||||
if (!isTypable(e.keyIdentifier)
|
if (!isTypable(e.keyIdentifier)
|
||||||
|| ( guac_keyboard.modifiers.ctrl && !guac_keyboard.modifiers.alt)
|
|| ( guac_keyboard.modifiers.ctrl && !guac_keyboard.modifiers.alt)
|
||||||
|| (!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
|
// Set keycode which will be associated with any future keypress
|
||||||
keydown_code = keynum;
|
keydown_code = keynum;
|
||||||
|
|
||||||
// Defer handling of event until after any other pending
|
// If we expect to handle via keypress, set failsafe timeout and
|
||||||
// key events.
|
// wait for keypress.
|
||||||
|
if (expect_keypress) {
|
||||||
if (!deferred_keypress)
|
if (!deferred_keypress)
|
||||||
deferred_keypress = window.setTimeout(handleKeyEvents, 0);
|
deferred_keypress = window.setTimeout(handleKeyEvents, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, handle now
|
||||||
|
else {
|
||||||
|
e.preventDefault();
|
||||||
|
handleKeyEvents();
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -493,10 +503,12 @@ Guacamole.Keyboard = function(element) {
|
|||||||
sendKeyReleased(0xFFE9);
|
sendKeyReleased(0xFFE9);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defer handling of event until after any other pending
|
// Clear timeout, if any
|
||||||
// key events.
|
if (deferred_keypress)
|
||||||
if (!deferred_keypress)
|
window.clearTimeout(deferred_keypress);
|
||||||
deferred_keypress = window.setTimeout(handleKeyEvents, 0);
|
|
||||||
|
// Handle event with all aggregated data
|
||||||
|
handleKeyEvents();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -512,10 +524,6 @@ Guacamole.Keyboard = function(element) {
|
|||||||
if (window.event) keynum = window.event.keyCode;
|
if (window.event) keynum = window.event.keyCode;
|
||||||
else if (e.which) keynum = e.which;
|
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
|
// Ctrl/Alt/Shift
|
||||||
if (keynum == 16) guac_keyboard.modifiers.shift = false;
|
if (keynum == 16) guac_keyboard.modifiers.shift = false;
|
||||||
else if (keynum == 17) guac_keyboard.modifiers.ctrl = false;
|
else if (keynum == 17) guac_keyboard.modifiers.ctrl = false;
|
||||||
@@ -532,8 +540,6 @@ Guacamole.Keyboard = function(element) {
|
|||||||
// Send release event
|
// Send release event
|
||||||
sendKeyReleased(lastKeyDownChar);
|
sendKeyReleased(lastKeyDownChar);
|
||||||
|
|
||||||
}, 0);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// When focus is lost, clear modifiers.
|
// When focus is lost, clear modifiers.
|
||||||
|
Reference in New Issue
Block a user