mirror of https://github.com/apache/cloudstack.git
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:
parent
7dbff9b42c
commit
1354605073
|
|
@ -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();", "});",
|
||||
|
|
|
|||
|
|
@ -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: [
|
||||
|
|
|
|||
|
|
@ -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++) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue