Commit 28ba238f authored by zhchbin@gmail.com's avatar zhchbin@gmail.com

Enable user assign media keys in chrome://extensions page.

BUG=131612

Review URL: https://chromiumcodereview.appspot.com/23523019

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221360 0039d316-1c4b-4281-b951-d872f2087c98
parent 33c7b39f
...@@ -20,6 +20,10 @@ cr.define('options', function() { ...@@ -20,6 +20,10 @@ cr.define('options', function() {
/** @const */ var keyHome = 36; /** @const */ var keyHome = 36;
/** @const */ var keyIns = 45; /** @const */ var keyIns = 45;
/** @const */ var keyLeft = 37; /** @const */ var keyLeft = 37;
/** @const */ var keyMediaNextTrack = 176;
/** @const */ var keyMediaPlayPause = 179;
/** @const */ var keyMediaPrevTrack = 177;
/** @const */ var keyMediaStop = 178;
/** @const */ var keyPageDown = 34; /** @const */ var keyPageDown = 34;
/** @const */ var keyPageUp = 33; /** @const */ var keyPageUp = 33;
/** @const */ var keyPeriod = 190; /** @const */ var keyPeriod = 190;
...@@ -27,6 +31,15 @@ cr.define('options', function() { ...@@ -27,6 +31,15 @@ cr.define('options', function() {
/** @const */ var keyTab = 9; /** @const */ var keyTab = 9;
/** @const */ var keyUp = 38; /** @const */ var keyUp = 38;
/**
* Enum for whether we require modifiers of a keycode.
* @enum {number}
*/
var Modifiers = {
ARE_NOT_ALLOWED: 0,
ARE_REQUIRED: 1
};
/** /**
* Returns whether the passed in |keyCode| is a valid extension command * Returns whether the passed in |keyCode| is a valid extension command
* char or not. This is restricted to A-Z and 0-9 (ignoring modifiers) at * char or not. This is restricted to A-Z and 0-9 (ignoring modifiers) at
...@@ -42,6 +55,10 @@ cr.define('options', function() { ...@@ -42,6 +55,10 @@ cr.define('options', function() {
keyCode == keyHome || keyCode == keyHome ||
keyCode == keyIns || keyCode == keyIns ||
keyCode == keyLeft || keyCode == keyLeft ||
keyCode == keyMediaNextTrack ||
keyCode == keyMediaPlayPause ||
keyCode == keyMediaPrevTrack ||
keyCode == keyMediaStop ||
keyCode == keyPageDown || keyCode == keyPageDown ||
keyCode == keyPageUp || keyCode == keyPageUp ||
keyCode == keyPeriod || keyCode == keyPeriod ||
...@@ -90,6 +107,14 @@ cr.define('options', function() { ...@@ -90,6 +107,14 @@ cr.define('options', function() {
output += 'Insert'; break; output += 'Insert'; break;
case keyLeft: case keyLeft:
output += 'Left'; break; output += 'Left'; break;
case keyMediaNextTrack:
output += 'MediaNextTrack'; break;
case keyMediaPlayPause:
output += 'MediaPlayPause'; break;
case keyMediaPrevTrack:
output += 'MediaPrevTrack'; break;
case keyMediaStop:
output += 'MediaStop'; break;
case keyPageDown: case keyPageDown:
output += 'PageDown'; break; output += 'PageDown'; break;
case keyPageUp: case keyPageUp:
...@@ -109,6 +134,38 @@ cr.define('options', function() { ...@@ -109,6 +134,38 @@ cr.define('options', function() {
return output; return output;
} }
/**
* Returns whether the passed in |keyCode| require modifiers. Currently only
* "MediaNextTrack", "MediaPrevTrack", "MediaStop", "MediaPlayPause" are
* required to be used without any modifier.
* @param {int} keyCode The keycode to consider.
* @return {Modifiers} Returns whether the keycode require modifiers.
*/
function modifiers(keyCode) {
switch (keyCode) {
case keyMediaNextTrack:
case keyMediaPlayPause:
case keyMediaPrevTrack:
case keyMediaStop:
return Modifiers.ARE_NOT_ALLOWED;
default:
return Modifiers.ARE_REQUIRED;
}
}
/**
* Return true if the specified keyboard event has any one of following
* modifiers: "Ctrl", "Alt", "Cmd" on Mac, and "Shift" when the
* countShiftAsModifier is true.
* @param {Event} event The keyboard event to consider.
* @param {boolean} countShiftAsModifier Whether the 'ShiftKey' should be
* counted as modifier.
*/
function hasModifier(event, countShiftAsModifier) {
return event.ctrlKey || event.altKey || (cr.isMac && event.metaKey) ||
(countShiftAsModifier && event.shiftKey);
}
ExtensionCommandList.prototype = { ExtensionCommandList.prototype = {
__proto__: HTMLDivElement.prototype, __proto__: HTMLDivElement.prototype,
...@@ -323,8 +380,16 @@ cr.define('options', function() { ...@@ -323,8 +380,16 @@ cr.define('options', function() {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
if (!event.ctrlKey && !event.altKey && (!cr.isMac || !event.metaKey)) if (modifiers(event.keyCode) == Modifiers.ARE_REQUIRED &&
return; // Ctrl or Alt is a must (or Cmd on Mac). !hasModifier(event, false)) {
// Ctrl or Alt (or Cmd on Mac) is a must for most shortcuts.
return;
}
if (modifiers(event.keyCode) == Modifiers.ARE_NOT_ALLOWED &&
hasModifier(event, true)) {
return;
}
var shortcutNode = this.capturingElement_; var shortcutNode = this.capturingElement_;
var keystroke = keystrokeToString(event); var keystroke = keystrokeToString(event);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment