CLOUDSTACK-7373: Incorrect Japanese keyboard mapping with CentOS CLI guestOS on VMware host.

This fix is to correct the JP keyboard mapping for VMs with windows and centOS GUI
and CLI OS on VMware hypervisor. Also fixed some known issues on centOS CLI on XS
hypervisor. Fix is not causing any regression.
This commit is contained in:
Sanjay Tripathi 2014-08-19 16:42:10 +05:30
parent 7dbff9b42c
commit 1354605073
3 changed files with 99 additions and 41 deletions

View File

@ -323,7 +323,7 @@ public abstract class ConsoleProxyClientBase implements ConsoleProxyClient, Cons
"<li><a href=\"#\" cmd=\"keyboard_jp\"><span>Japanese keyboard</span></a></li>", "</ul>", "</li>", "</ul>",
"<span id=\"light\" class=\"dark\" cmd=\"toggle_logwin\"></span>", "</div>", "<div id=\"main_panel\" tabindex=\"1\"></div>",
"<script language=\"javascript\">", "var acceptLanguages = '" + sbLanguages.toString() + "';", "var tileMap = [ " + tileSequence + " ];",
"var ajaxViewer = new AjaxViewer('main_panel', '" + imgUrl + "', '" + updateUrl + "', '" + locale + "', tileMap, ",
"var ajaxViewer = new AjaxViewer('main_panel', '" + imgUrl + "', '" + updateUrl + "', '" + locale + "', '" + guest + "', tileMap, ",
String.valueOf(width) + ", " + String.valueOf(height) + ", " + String.valueOf(tileWidth) + ", " + String.valueOf(tileHeight) + ");",
"$(function() {", "ajaxViewer.start();", "});",

View File

@ -230,46 +230,46 @@ var keyboardTables = [
//{keycode: JS_KEY_GRAVE_ACCENT, entry : X11_KEY_GRAVE_ACCENT},
//[192 / 64 = "' @"]
{keycode: 192, entry : 0x5b, browser: "IE"},
{keycode: 64, entry : 0x5b, browser: "Firefox"},
{keycode: 64, entry : 0x5b, guestos: "windows", browser: "Firefox"},
//{keycode: JS_KEY_ADD, entry : X11_KEY_ADD},
//[187 / 59 = "; +"]
{keycode: 187, entry : 0x3a, browser: "IE"},
{keycode: 59, entry : 0x3b, browser: "Firefox"},
{keycode: 59, entry : 0x3b, guestos: "windows", browser: "Firefox"},
//{keycode: JS_KEY_OPEN_BRACKET, entry : X11_KEY_OPEN_BRACKET},
//[219 = "[{"]
{keycode: 219, entry : 0x5d, browser: "IE"},
{keycode: 219, entry : 0x5d, browser: "Firefox"},
{keycode: 219, entry : 0x5d, guestos: "windows", browser: "IE"},
{keycode: 219, entry : 0x5d, guestos: "windows", browser: "Firefox"},
//{keycode: JS_KEY_CLOSE_BRACKET, entry : X11_KEY_CLOSE_BRACKET},
//[221 = "]}"]
{keycode: 221, entry : 0x5c, browser: "IE"},
{keycode: 221, entry : 0x5c, browser: "Firefox"},
{keycode: JS_KEY_BACK_SLASH, entry : X11_KEY_BACK_SLASH},
{keycode: 221, entry : 0x5c, guestos: "windows", browser: "IE"},
{keycode: 221, entry : 0x5c, guestos: "windows", browser: "Firefox"},
{keycode: JS_KEY_BACK_SLASH, entry : X11_KEY_BACK_SLASH, guestos: "windows"},
//{keycode: JS_KEY_SINGLE_QUOTE, entry : X11_KEY_SINGLE_QUOTE},
//[222 / 160 = "~^"]
{keycode: 222, entry : 0x3d, browser: "IE"},
{keycode: 160, entry : 0x3d, browser: "Firefox"},
{keycode: 222, entry : 0x3d, browser: "IE"},
{keycode: 160, entry : 0x3d, guestos: "windows", browser: "Firefox"},
//[173 = "-=" ] specific to Firefox browser
{keycode: 173, entry : 0x2d, browser: "Firefox"},
{keycode: JS_KEY_COMMA, entry : X11_KEY_COMMA},
{keycode: JS_KEY_PERIOD, entry : X11_KEY_PERIOD},
{keycode: JS_KEY_FORWARD_SLASH, entry : X11_KEY_FORWARD_SLASH},
{keycode: 173, entry : 0x2d, guestos: "windows", browser: "Firefox"},
{keycode: JS_KEY_COMMA, entry : X11_KEY_COMMA, guestos: "windows"},
{keycode: JS_KEY_PERIOD, entry : X11_KEY_PERIOD, guestos: "windows"},
{keycode: JS_KEY_FORWARD_SLASH, entry : X11_KEY_FORWARD_SLASH, guestos: "windows"},
{keycode: JS_KEY_DASH, entry : X11_KEY_DASH},
{keycode: JS_KEY_SEMI_COLON, entry : X11_KEY_SEMI_COLON},
{keycode: JS_KEY_NUMPAD0, entry : X11_KEY_KP_0},
{keycode: JS_KEY_NUMPAD1, entry : X11_KEY_KP_1},
{keycode: JS_KEY_NUMPAD2, entry : X11_KEY_KP_2},
{keycode: JS_KEY_NUMPAD3, entry : X11_KEY_KP_3},
{keycode: JS_KEY_NUMPAD4, entry : X11_KEY_KP_4},
{keycode: JS_KEY_NUMPAD5, entry : X11_KEY_KP_5},
{keycode: JS_KEY_NUMPAD6, entry : X11_KEY_KP_6},
{keycode: JS_KEY_NUMPAD7, entry : X11_KEY_KP_7},
{keycode: JS_KEY_NUMPAD8, entry : X11_KEY_KP_8},
{keycode: JS_KEY_NUMPAD9, entry : X11_KEY_KP_9},
{keycode: JS_KEY_DECIMAL_POINT, entry : X11_KEY_KP_Decimal},
{keycode: JS_KEY_DIVIDE, entry : 0xffaf},
{keycode: JS_KEY_MULTIPLY, entry : 0xffaa},
{keycode: JS_KEY_ADD, entry : 0xffab},
{keycode: JS_KEY_SUBSTRACT, entry : 0xffad},
{keycode: JS_KEY_NUMPAD0, entry : X11_KEY_NUMPAD0, guestos: "windows"},
{keycode: JS_KEY_NUMPAD1, entry : X11_KEY_NUMPAD1, guestos: "windows"},
{keycode: JS_KEY_NUMPAD2, entry : X11_KEY_NUMPAD2, guestos: "windows"},
{keycode: JS_KEY_NUMPAD3, entry : X11_KEY_NUMPAD3, guestos: "windows"},
{keycode: JS_KEY_NUMPAD4, entry : X11_KEY_NUMPAD4, guestos: "windows"},
{keycode: JS_KEY_NUMPAD5, entry : X11_KEY_NUMPAD5, guestos: "windows"},
{keycode: JS_KEY_NUMPAD6, entry : X11_KEY_NUMPAD6, guestos: "windows"},
{keycode: JS_KEY_NUMPAD7, entry : X11_KEY_NUMPAD7, guestos: "windows"},
{keycode: JS_KEY_NUMPAD8, entry : X11_KEY_NUMPAD8, guestos: "windows"},
{keycode: JS_KEY_NUMPAD9, entry : X11_KEY_NUMPAD9, guestos: "windows"},
{keycode: JS_KEY_DECIMAL_POINT, entry : X11_KEY_PERIOD, guestos: "windows"},
{keycode: JS_KEY_DIVIDE, entry : 0xffaf, guestos: "windows"},
{keycode: JS_KEY_MULTIPLY, entry : 0xffaa, guestos: "windows"},
{keycode: JS_KEY_ADD, entry : 0xffab, guestos: "windows"},
{keycode: JS_KEY_SUBSTRACT, entry : 0xffad, guestos: "windows"},
//Kanji Key = 243 / 244
{keycode: 243, entry : 0x7e, browser: "IE"},
{keycode: 244, entry : 0x7e, browser: "IE"},
@ -286,14 +286,66 @@ var keyboardTables = [
*/
//[186 / 58 = "~^"]
{keycode: 186, entry : 0x22, browser: "IE"},
{keycode: 58, entry : 0x22, browser: "Firefox"},
{keycode: 58, entry : 0x22, guestos: "windows", browser: "Firefox"},
],
keyPress: [
{keycode: 61, entry: [
{type: KEY_DOWN, code: X11_KEY_ADD, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_ADD, modifiers: 0, shift: false }
]},
]
// 34 : " " "
{keycode: 34, entry: [{type: KEY_DOWN, code: 0x22, modifiers: 64, shift: true }]},
{keycode: 42, entry: 0xffaa },
// 39 : " ' " (shift+7)
{keycode: 39, entry: [
{type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x22, modifiers: 0, shift: false },
{type: KEY_UP, code: 0x22, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x22, modifiers: 0, shift: true },
{type: KEY_UP, code: 0x22, modifiers: 0, shift: true },
]}, //58 : " : "
{keycode: 58, entry: [
{type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x3a, modifiers: 0, shift: false },
{type: KEY_UP, code: 0x3a, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x3a, modifiers: 0, shift: true },
{type: KEY_UP, code: 0x3a, modifiers: 0, shift: true },
]},
// 94 : "^"
{keycode: 94, entry: [
{type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x36, modifiers: 0, shift: false },
{type: KEY_UP, code: 0x36, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x36, modifiers: 0, shift: true },
{type: KEY_UP, code: 0x36, modifiers: 0, shift: true },
]},
// 64 : "@"
{keycode: 64, entry: [
{type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x32, modifiers: 0, shift: false },
{type: KEY_UP, code: 0x32, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x32, modifiers: 0, shift: true },
{type: KEY_UP, code: 0x32, modifiers: 0, shift: true },
]},
// 96 : "'"
{keycode: 96, entry: [
{type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x7e, modifiers: 0, shift: false },
{type: KEY_UP, code: 0x7e, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x7e, modifiers: 0, shift: true },
{type: KEY_UP, code: 0x7e, modifiers: 0, shift: true },
]},
// 61 : "="
{keycode: 61, entry: [
{type: KEY_DOWN, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x3d, modifiers: 0, shift: false },
{type: KEY_UP, code: 0x3d, modifiers: 0, shift: false },
{type: KEY_UP, code: X11_KEY_SHIFT, modifiers: 0, shift: false },
{type: KEY_DOWN, code: 0x3d, modifiers: 0, shift: true },
{type: KEY_UP, code: 0x3d, modifiers: 0, shift: true },
]},
]
}
}, {tindex: 2, keyboardType: KEYBOARD_TYPE_UK, mappingTable:
{X11: [

View File

@ -161,7 +161,7 @@ KeyboardMapper.prototype = {
}
var X11Keysym = code;
if(this.jsX11KeysymMap[code] != undefined) {
if(this.jsX11KeysymMap[code] != undefined && (guestos == 'windows' || modifiers != AjaxViewer.SHIFT_KEY_MASK)) {
X11Keysym = this.jsX11KeysymMap[code];
if(typeof this.jsX11KeysymMap[code] == "boolean") {
return;
@ -175,15 +175,15 @@ KeyboardMapper.prototype = {
} else {
this.mappedInput.push({type : eventType, code: X11Keysym, modifiers: modifiers});
}
} else {
} else if(guestos == 'windows' || ((modifiers & (AjaxViewer.CTRL_KEY_MASK | AjaxViewer.ALT_KEY_MASK)) != 0)){
this.mappedInput.push({type : eventType, code: X11Keysym, modifiers: modifiers});
}
// special handling for ALT/CTRL key
if(eventType == AjaxViewer.KEY_UP && (code == AjaxViewer.JS_KEY_ALT || code == code == AjaxViewer.JS_KEY_CTRL))
if(eventType == AjaxViewer.KEY_UP && (code == AjaxViewer.JS_KEY_ALT || code == AjaxViewer.JS_KEY_CTRL))
this.mappedInput.push({type : eventType, code: this.jsX11KeysymMap[code], modifiers: modifiers});
} else if(eventType == AjaxViewer.KEY_PRESS) {
} else if(eventType == AjaxViewer.KEY_PRESS && guestos == 'null') {
var X11Keysym = code;
X11Keysym = this.jsKeyPressX11KeysymMap[code];
if(X11Keysym) {
@ -196,6 +196,9 @@ KeyboardMapper.prototype = {
this.mappedInput.push({type : AjaxViewer.KEY_DOWN, code: X11Keysym, modifiers: modifiers});
this.mappedInput.push({type : AjaxViewer.KEY_UP, code: X11Keysym, modifiers: modifiers});
}
} else {
this.mappedInput.push({type : AjaxViewer.KEY_DOWN, code: code, modifiers: modifiers});
this.mappedInput.push({type : AjaxViewer.KEY_UP, code: code, modifiers: modifiers});
}
}
},
@ -332,7 +335,7 @@ KeyboardMapper.prototype = {
/////////////////////////////////////////////////////////////////////////////
// class AjaxViewer
//
function AjaxViewer(panelId, imageUrl, updateUrl, locale, tileMap, width, height, tileWidth, tileHeight) {
function AjaxViewer(panelId, imageUrl, updateUrl, locale, guestos, tileMap, width, height, tileWidth, tileHeight) {
// logging is disabled by default so that it won't have negative impact on performance
// however, a back door key-sequence can trigger to open the logger window, it is designed to help
// trouble-shooting
@ -352,6 +355,7 @@ function AjaxViewer(panelId, imageUrl, updateUrl, locale, tileMap, width, height
this.updateUrl = updateUrl;
this.tileMap = tileMap;
this.guestos = guestos;
this.dirty = true;
this.width = width;
this.height = height;
@ -745,7 +749,9 @@ AjaxViewer.prototype = {
for (var j = 0; j < x11Maps.length; j++) {
var code = x11Maps[j].keycode;
var mappedEntry = x11Maps[j].entry;
this.keyboardMappers[keyboardType].jsX11KeysymMap[code] = mappedEntry;
if(x11Maps[j].guestos == undefined || x11Maps[j].guestos == this.guestos) {
this.keyboardMappers[keyboardType].jsX11KeysymMap[code] = mappedEntry;
}
}
var keyPressMaps = mappings.keyPress;
for (var j = 0; j < keyPressMaps.length; j++) {