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'); |