summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2011-04-12 09:06:11 -0500
committerJoel Martin <github@martintribe.org>2011-04-12 09:06:11 -0500
commitfac149ddbe32dd233a1b34ffc4450508daaa420e (patch)
tree2989aea7702de48e4fed8791e60df7a846f9e96b
parent303819eaa956e6c16a9513eedec90d1b0daace0c (diff)
downloadnovnc-fac149ddbe32dd233a1b34ffc4450508daaa420e.tar.gz
input.js: adjust special key handling for non-US keys.
Issue #21 - non-US keyboard layouts. Only identify some keys as special during the keyDown event so that when using non-US keyboards the values don't overlap with the values for normal keys. Some keys have to still be identified in both keyDown and keyPress since they generate both: backspace and enter for Firefox and Opera, tab for Opera.
-rw-r--r--include/input.js52
1 files changed, 31 insertions, 21 deletions
diff --git a/include/input.js b/include/input.js
index dd9b04a..b8c5de7 100644
--- a/include/input.js
+++ b/include/input.js
@@ -42,35 +42,45 @@ that.set_target = function () { throw("target cannot be changed"); }
// From the event keyCode return the keysym value for keys that need
// to be suppressed otherwise they may trigger unintended browser
// actions
-function getKeysymSpecial(evt, kind) {
+function getKeysymSpecial(evt) {
var keysym = null;
+ /*
switch ( evt.keyCode ) {
+ // These generate a keyDown and keyPress in Firefox and Opera
case 8 : keysym = 0xFF08; break; // BACKSPACE
- case 9 : keysym = 0xFF09; break; // TAB
case 13 : keysym = 0xFF0D; break; // ENTER
- case 27 : keysym = 0xFF1B; break; // ESCAPE
- case 46 : keysym = 0xFFFF; break; // DELETE
- case 36 : keysym = 0xFF50; break; // HOME
- case 35 : keysym = 0xFF57; break; // END
- case 33 : keysym = 0xFF55; break; // PAGE_UP
- case 34 : keysym = 0xFF56; break; // PAGE_DOWN
- case 37 : keysym = 0xFF51; break; // LEFT
- case 38 : keysym = 0xFF52; break; // UP
- case 39 : keysym = 0xFF53; break; // RIGHT
- case 40 : keysym = 0xFF54; break; // DOWN
- case 16 : keysym = 0xFFE1; break; // SHIFT
- case 17 : keysym = 0xFFE3; break; // CONTROL
- //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option)
- case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command)
+ // This generates a keyDown and keyPress in Opera
+ case 9 : keysym = 0xFF09; break; // TAB
default : break;
}
+ */
- if (kind === 'down') {
+ if (evt.type === 'keydown') {
switch ( evt.keyCode ) {
+ case 8 : keysym = 0xFF08; break; // BACKSPACE
+ case 13 : keysym = 0xFF0D; break; // ENTER
+ case 9 : keysym = 0xFF09; break; // TAB
+
+ case 27 : keysym = 0xFF1B; break; // ESCAPE
+ case 46 : keysym = 0xFFFF; break; // DELETE
+
+ case 36 : keysym = 0xFF50; break; // HOME
+ case 35 : keysym = 0xFF57; break; // END
+ case 33 : keysym = 0xFF55; break; // PAGE_UP
+ case 34 : keysym = 0xFF56; break; // PAGE_DOWN
case 45 : keysym = 0xFF63; break; // INSERT
// '-' during keyPress
+ case 37 : keysym = 0xFF51; break; // LEFT
+ case 38 : keysym = 0xFF52; break; // UP
+ case 39 : keysym = 0xFF53; break; // RIGHT
+ case 40 : keysym = 0xFF54; break; // DOWN
+ case 16 : keysym = 0xFFE1; break; // SHIFT
+ case 17 : keysym = 0xFFE3; break; // CONTROL
+ //case 18 : keysym = 0xFFE7; break; // Left Meta (Mac Option)
+ case 18 : keysym = 0xFFE9; break; // Left ALT (Mac Command)
+
case 112 : keysym = 0xFFBE; break; // F1
case 113 : keysym = 0xFFBF; break; // F2
case 114 : keysym = 0xFFC0; break; // F3
@@ -205,7 +215,7 @@ function show_keyDownList(kind) {
}
function copyKeyEvent(evt) {
- var members = ['keyCode', 'charCode', 'which',
+ var members = ['type', 'keyCode', 'charCode', 'which',
'altKey', 'ctrlKey', 'shiftKey',
'keyLocation', 'keyIdentifier'], i, obj = {};
for (i = 0; i < members.length; i++) {
@@ -302,7 +312,7 @@ function onKeyDown(e) {
fevt = copyKeyEvent(evt);
- keysym = getKeysymSpecial(evt, 'down');
+ keysym = getKeysymSpecial(evt);
// Save keysym decoding for use in keyUp
fevt.keysym = keysym;
if (keysym) {
@@ -343,12 +353,12 @@ function onKeyPress(e) {
Util.Debug("onKeyPress kC:" + evt.keyCode + " cC:" + evt.charCode + " w:" + evt.which);
if (((evt.which !== "undefined") && (evt.which === 0)) ||
- (getKeysymSpecial(evt, 'press'))) {
+ (getKeysymSpecial(evt))) {
// Firefox and Opera generate a keyPress event even if keyDown
// is suppressed. But the keys we want to suppress will have
// either:
// - the which attribute set to 0
- // - getKeysymSpecial(..., 'press') will identify it
+ // - getKeysymSpecial() will identify it
Util.Debug("Ignoring special key in keyPress");
Util.stopEvent(e);
return false;