Index: chrome/browser/resources/chromeos/braille_ime/braille_ime.js |
diff --git a/chrome/browser/resources/chromeos/braille_ime/braille_ime.js b/chrome/browser/resources/chromeos/braille_ime/braille_ime.js |
index 0be3b4ca249677e03205a2243d42d913084b31a7..cc4c5f216b4fdd87b631536ca3466bf6cc735506 100644 |
--- a/chrome/browser/resources/chromeos/braille_ime/braille_ime.js |
+++ b/chrome/browser/resources/chromeos/braille_ime/braille_ime.js |
@@ -23,6 +23,10 @@ |
* Sent when the user typed a braille cell using the standard keyboard. |
* ChromeVox treats this similarly to entering braille input using the |
* braille display. |
+ * {type: 'backspace', requestId: string} |
+ * Sent when the user presses the backspace key. |
+ * ChromeVox must respond with a {@code keyEventHandled} message |
+ * with the same request id. |
* |
* Sent from ChromeVox to this IME: |
* {type: 'replaceText', contextID: number, deleteBefore: number, |
@@ -31,6 +35,10 @@ |
* and inserts {@code newText}. {@code contextID} identifies the text field |
* to apply the update to (no change will happen if focus has moved to a |
* different field). |
+ * {type: 'keyEventHandled', requestId: string, result: boolean} |
+ * Response to a {@code backspace} message indicating whether the |
+ * backspace was handled by ChromeVox or should be allowed to propagate |
+ * through the normal event handling pipeline. |
*/ |
/** |
@@ -132,7 +140,8 @@ BrailleIme.prototype = { |
chrome.input.ime.onBlur.addListener(this.onBlur_.bind(this)); |
chrome.input.ime.onInputContextUpdate.addListener( |
this.onInputContextUpdate_.bind(this)); |
- chrome.input.ime.onKeyEvent.addListener(this.onKeyEvent_.bind(this)); |
+ chrome.input.ime.onKeyEvent.addListener(this.onKeyEvent_.bind(this), |
+ ['async']); |
chrome.input.ime.onReset.addListener(this.onReset_.bind(this)); |
chrome.input.ime.onMenuItemActivated.addListener( |
this.onMenuItemActivated_.bind(this)); |
@@ -203,13 +212,14 @@ BrailleIme.prototype = { |
* Called by the system when this IME is active and a key event is generated. |
* @param {string} engineID Engine ID, should be 'braille'. |
* @param {!ChromeKeyboardEvent} event The keyboard event. |
- * @return {boolean} Whether the event was handled by this IME (true) or |
- * should be allowed to propagate. |
* @private |
*/ |
onKeyEvent_: function(engineID, event) { |
this.log_('onKeyEvent', engineID + ', ' + JSON.stringify(event)); |
- return this.processKey_(event); |
+ var result = this.processKey_(event); |
+ if (result !== undefined) { |
+ chrome.input.ime.keyEventHandled(event.requestId, result); |
+ } |
}, |
/** |
@@ -262,13 +272,21 @@ BrailleIme.prototype = { |
/** |
* Handles a qwerty key on the home row as a braille key. |
* @param {!ChromeKeyboardEvent} event Keyboard event. |
- * @return {boolean} Whether the key event was handled or not. |
+ * @return {boolean|undefined} Whether the event was handled, or |
+ * {@code undefined} if handling was delegated to ChromeVox. |
* @private |
*/ |
processKey_: function(event) { |
if (!this.useStandardKeyboard_) { |
return false; |
} |
+ if (event.code === 'Backspace' && event.type === 'keydown') { |
+ this.pressed_ = 0; |
+ this.accumulated_ = 0; |
+ this.sendToChromeVox_( |
+ {type: 'backspace', requestId: event.requestId}); |
+ return undefined; |
+ } |
var dot = this.CODE_TO_DOT_[event.code]; |
if (!dot || event.altKey || event.ctrlKey || event.shiftKey || |
event.capsLock) { |
@@ -336,6 +354,15 @@ BrailleIme.prototype = { |
this.replaceText_(message.contextID, message.deleteBefore, |
message.newText); |
break; |
+ case 'keyEventHandled': |
+ message = |
+ /** @type {{requestId: string, result: boolean}} */ (message); |
+ chrome.input.ime.keyEventHandled(message.requestId, message.result); |
+ break; |
+ default: |
+ console.error('Unknown message from ChromeVox: ' + |
+ JSON.stringify(message)); |
+ break; |
} |
}, |
@@ -388,6 +415,7 @@ BrailleIme.prototype = { |
* @param {string} toInsert Text to insert at the cursor. |
*/ |
replaceText_: function(contextID, deleteBefore, toInsert) { |
+ console.log('replaceText: ' + deleteBefore + ',' + toInsert); |
David Tseng
2014/06/19 21:30:16
nit: Remove
|
var addText = function() { |
chrome.input.ime.commitText( |
{contextID: contextID, text: toInsert}); |