Index: chrome/browser/resources/chromeos/keyboard_overlay.js |
diff --git a/chrome/browser/resources/chromeos/keyboard_overlay.js b/chrome/browser/resources/chromeos/keyboard_overlay.js |
index a8ccd1f472b193c949ef9ce9d2a271255f62d9dd..0b3ce86f935a3dadf79db0c13731f5e5c39682a2 100644 |
--- a/chrome/browser/resources/chromeos/keyboard_overlay.js |
+++ b/chrome/browser/resources/chromeos/keyboard_overlay.js |
@@ -22,13 +22,15 @@ var BASE_INSTRUCTIONS = { |
var MODIFIER_TO_CLASS = { |
'SHIFT': 'modifier-shift', |
'CTRL': 'modifier-ctrl', |
- 'ALT': 'modifier-alt' |
+ 'ALT': 'modifier-alt', |
+ 'SEARCH': 'modifier-search' |
}; |
var IDENTIFIER_TO_CLASS = { |
'2A': 'is-shift', |
'1D': 'is-ctrl', |
- '38': 'is-alt' |
+ '38': 'is-alt', |
+ 'E0 5B': 'is-search' |
}; |
var LABEL_TO_IDENTIFIER = { |
@@ -116,12 +118,57 @@ function getLayouts() { |
return keyboardOverlayData['layouts']; |
} |
+// Cache the shortcut data after it is constructed. |
+var shortcutDataCache; |
+ |
/** |
* Returns shortcut data. |
* @return {Object} Keyboard shortcut data. |
*/ |
function getShortcutData() { |
- return keyboardOverlayData['shortcut']; |
+ if (shortcutDataCache) |
+ return shortcutDataCache; |
+ |
+ shortcutDataCache = keyboardOverlayData['shortcut']; |
+ |
+ var searchKeyIsModifier = |
+ loadTimeData.getString('keyboardSearchKeyActsAsFunctionKey') == 'true'; |
+ if (searchKeyIsModifier) { |
+ // TODO(mazda): Clean this up and move these out to the data js. |
+ var searchModifierRemoveShortcuts = { |
+ 'backspace<>ALT': 'keyboardOverlayDelete', |
+ 'down<>ALT': 'keyboardOverlayPageDown', |
+ 'down<>ALT<>CTRL': 'keyboardOverlayEnd', |
+ 'up<>ALT': 'keyboardOverlayPageUp', |
+ 'up<>ALT<>CTRL': 'keyboardOverlayHome' |
+ }; |
+ var searchModifierAddShortcuts = { |
+ '1<>SEARCH': 'keyboardOverlayF1', |
+ '2<>SEARCH': 'keyboardOverlayF2', |
+ '3<>SEARCH': 'keyboardOverlayF3', |
+ '4<>SEARCH': 'keyboardOverlayF4', |
+ '5<>SEARCH': 'keyboardOverlayF5', |
+ '6<>SEARCH': 'keyboardOverlayF6', |
+ '7<>SEARCH': 'keyboardOverlayF7', |
+ '8<>SEARCH': 'keyboardOverlayF8', |
+ '9<>SEARCH': 'keyboardOverlayF9', |
+ '0<>SEARCH': 'keyboardOverlayF10', |
+ '-<>SEARCH': 'keyboardOverlayF11', |
+ '=<>SEARCH': 'keyboardOverlayF12', |
+ 'backspace<>SEARCH': 'keyboardOverlayDelete', |
+ 'down<>SEARCH': 'keyboardOverlayPageDown', |
+ 'right<>SEARCH': 'keyboardOverlayEnd', |
+ 'up<>SEARCH': 'keyboardOverlayPageUp', |
+ 'left<>SEARCH': 'keyboardOverlayHome' |
+ }; |
+ |
+ for (var key in searchModifierRemoveShortcuts) |
+ delete shortcutDataCache[key]; |
+ for (var key in searchModifierAddShortcuts) |
+ shortcutDataCache[key] = searchModifierAddShortcuts[key]; |
+ } |
+ |
+ return shortcutDataCache; |
} |
/** |
@@ -163,6 +210,8 @@ function hex2char(hex) { |
return result; |
} |
+var searchIsPressed = false; |
+ |
/** |
* Returns a list of modifiers from the key event. |
* @param {Event} e The key event. |
@@ -177,17 +226,22 @@ function getModifiers(e) { |
16: 'SHIFT', |
17: 'CTRL', |
18: 'ALT', |
+ 91: 'SEARCH', |
}; |
var modifierWithKeyCode = keyCodeToModifier[e.keyCode]; |
- var isPressed = {'SHIFT': e.shiftKey, 'CTRL': e.ctrlKey, 'ALT': e.altKey}; |
- // if e.keyCode is one of Shift, Ctrl and Alt, isPressed should |
- // be changed because the key currently pressed |
- // does not affect the values of e.shiftKey, e.ctrlKey and e.altKey |
+ var isPressed = { |
+ 'SHIFT': e.shiftKey, |
+ 'CTRL': e.ctrlKey, |
+ 'ALT': e.altKey, |
+ 'SEARCH': searchIsPressed |
+ }; |
if (modifierWithKeyCode) |
isPressed[modifierWithKeyCode] = isKeyDown; |
+ searchIsPressed = isPressed['SEARCH']; |
+ |
// make the result array |
- return ['SHIFT', 'CTRL', 'ALT'].filter( |
+ return ['SHIFT', 'CTRL', 'ALT', 'SEARCH'].filter( |
function(modifier) { |
return isPressed[modifier]; |
}).sort(); |
@@ -248,7 +302,8 @@ function getKeyClasses(identifier, modifiers) { |
if ((identifier == '2A' && contains(modifiers, 'SHIFT')) || |
(identifier == '1D' && contains(modifiers, 'CTRL')) || |
- (identifier == '38' && contains(modifiers, 'ALT'))) { |
+ (identifier == '38' && contains(modifiers, 'ALT')) || |
+ (identifier == 'E0 5B' && contains(modifiers, 'SEARCH'))) { |
classes.push('pressed'); |
classes.push(IDENTIFIER_TO_CLASS[identifier]); |
} |
@@ -515,8 +570,15 @@ function initLayout() { |
var instructionsText = document.createElement('div'); |
instructionsText.id = 'instructions-text'; |
instructionsText.className = 'keyboard-overlay-instructions-text'; |
- instructionsText.innerHTML = |
- loadTimeData.getString('keyboardOverlayInstructions'); |
+ var searchKeyIsModifier = |
+ loadTimeData.getString('keyboardSearchKeyActsAsFunctionKey') == 'true'; |
+ if (searchKeyIsModifier) { |
+ instructionsText.innerHTML = |
+ loadTimeData.getString('keyboardOverlayInstructionsWithSearch'); |
+ } else { |
+ instructionsText.innerHTML = |
+ loadTimeData.getString('keyboardOverlayInstructions'); |
+ } |
instructions.appendChild(instructionsText); |
var instructionsHideText = document.createElement('div'); |
instructionsHideText.id = 'instructions-hide-text'; |