Chromium Code Reviews| Index: chrome/browser/resources/keyboard/common.js |
| diff --git a/chrome/browser/resources/keyboard/common.js b/chrome/browser/resources/keyboard/common.js |
| index 7d1ee801b1813139c81be2c69b3ff527c34658ee..a65b6ca1b2b1c0669f3fbd4b70e9a3eeb74c3593 100644 |
| --- a/chrome/browser/resources/keyboard/common.js |
| +++ b/chrome/browser/resources/keyboard/common.js |
| @@ -92,11 +92,13 @@ function transitionMode(transition) { |
| */ |
| function sendKey(key, type) { |
| var keyEvent = {'keyIdentifier': key}; |
| - if (!type || type == 'keydown') { |
| + if (!type || type == 'keydown' || type == 'keyup') { |
|
bryeung
2011/08/12 18:07:44
This if and the type parameter are now useless: ty
mazda
2011/08/16 09:45:50
Done.
|
| // A keypress event is automatically generated for printable characters |
| // immediately following the keydown event. |
| - keyEvent.type = 'keydown'; |
| if (chrome.experimental) { |
| + keyEvent.type = 'keydown'; |
| + chrome.experimental.input.sendKeyboardEvent(keyEvent); |
| + keyEvent.type = 'keyup'; |
| chrome.experimental.input.sendKeyboardEvent(keyEvent); |
| } |
| // Exit shift mode after pressing any key but space. |
| @@ -108,12 +110,6 @@ function sendKey(key, type) { |
| transitionMode(SHIFT_MODE); |
| } |
| } |
| - if (!type || type == 'keyup') { |
| - keyEvent.type = 'keyup'; |
| - if (chrome.experimental) { |
| - chrome.experimental.input.sendKeyboardEvent(keyEvent); |
| - } |
| - } |
| } |
| /** |
| @@ -211,14 +207,21 @@ function setupKeyEventHandlers(key, element, keyDownHandler, opt_keyUpHandler) { |
| evt.preventDefault(); |
| }; |
| + var outHandler = function(evt) { |
| + // Reset key press state if the point goes out of the element. |
| + key.pressed = false; |
| + } |
| + |
| // Setup mouse event handlers. |
| element.addEventListener('mousedown', downHandler); |
| element.addEventListener('mouseup', upHandler); |
| - element.addEventListener('mouseout', upHandler); |
| + element.addEventListener('mouseout', outHandler); |
| // Setup touch handlers. |
| element.addEventListener('touchstart', downHandler); |
| element.addEventListener('touchend', upHandler); |
| + // TODO(mazda): Add a handler for touchleave once Webkit supports it. |
| + // element.addEventListener('touchleave', outHandler); |
| } |
| /** |
| @@ -362,8 +365,7 @@ Key.prototype = { |
| this.modeElements_[mode].className = 'key'; |
| addContent(this.modeElements_[mode], this.modes_[mode].display); |
| - setupKeyEventHandlers(this, this.modeElements_[mode], |
| - sendKeyFunction(this.modes_[mode].keyIdentifier, 'keydown'), |
| + setupKeyEventHandlers(this, this.modeElements_[mode], null, |
| sendKeyFunction(this.modes_[mode].keyIdentifier, 'keyup')); |
| return this.modeElements_[mode]; |
| @@ -396,9 +398,14 @@ SvgKey.prototype = { |
| this.modeElements_[mode].classList.add(this.className_); |
| addContent(this.modeElements_[mode]); |
| - setupKeyEventHandlers(this, this.modeElements_[mode], |
| - sendKeyFunction(this.keyId_, 'keydown'), |
| - sendKeyFunction(this.keyId_, 'keyup')); |
| + if (this.repeat_) { |
| + // send the key event on key down if key repeat is enabled |
| + setupKeyEventHandlers(this, this.modeElements_[mode], |
| + sendKeyFunction(this.keyId_, 'keydown')); |
|
bryeung
2011/08/12 18:07:44
Are you sure this behaviour matches Android?
Now,
mazda
2011/08/16 09:45:50
Yes, I checked that the delete key on Android keyb
|
| + } else { |
| + setupKeyEventHandlers(this, this.modeElements_[mode], null, |
| + sendKeyFunction(this.keyId_, 'keyup')); |
| + } |
| return this.modeElements_[mode]; |
| } |
| @@ -429,8 +436,7 @@ SpecialKey.prototype = { |
| this.modeElements_[mode].classList.add(this.className_); |
| addContent(this.modeElements_[mode], this.content_); |
| - setupKeyEventHandlers(this, this.modeElements_[mode], |
| - sendKeyFunction(this.keyId_, 'keydown'), |
| + setupKeyEventHandlers(this, this.modeElements_[mode], null, |
| sendKeyFunction(this.keyId_, 'keyup')); |
| return this.modeElements_[mode]; |
| @@ -538,7 +544,7 @@ DotComKey.prototype = { |
| this.modeElements_[mode].className = 'key com'; |
| addContent(this.modeElements_[mode], '.com'); |
| - setupKeyEventHandlers(this, this.modeElements_[mode], |
| + setupKeyEventHandlers(this, this.modeElements_[mode], null, |
| function() { |
| sendKey('.'); |
| sendKey('c'); |