Chromium Code Reviews| 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..494f6543cdd1a1af5228794e726cd4619191d928 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 = { |
| @@ -121,7 +123,46 @@ function getLayouts() { |
| * @return {Object} Keyboard shortcut data. |
| */ |
| function getShortcutData() { |
| - return keyboardOverlayData['shortcut']; |
| + var data = 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 data[key]; |
| + for (var key in searchModifierAddShortcuts) |
| + data[key] = searchModifierAddShortcuts[key]; |
| + } |
| + |
| + return data; |
|
mazda
2012/11/28 21:23:09
I think it's better to cache the result because ge
danakj
2012/11/28 21:30:38
Ah, okay. Done!
|
| } |
| /** |
| @@ -163,6 +204,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 +220,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 +296,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 +564,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'; |