Chromium Code Reviews| 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 deed955617be1eea14cdad4f1a0ca00c47745f34..b4babcdf2ec546473dcbea6d456fbff75c0cd5e3 100644 |
| --- a/chrome/browser/resources/chromeos/braille_ime/braille_ime.js |
| +++ b/chrome/browser/resources/chromeos/braille_ime/braille_ime.js |
| @@ -130,6 +130,15 @@ BrailleIme.prototype = { |
| */ |
| port_: null, |
| + // state of the current composition, if any. This is kep here so that |
| + // the composition can be committed on key presses. |
| + |
| + /** @type {number} */ |
|
David Tseng
2015/03/30 17:13:44
nit: @private; also, perhaps combine these two mem
|
| + compositionContextID_: 0, |
| + |
| + /** @type {string} */ |
| + compositionText_: '', |
| + |
| /** |
| * Registers event listeners in the chrome IME API. |
| */ |
| @@ -217,7 +226,7 @@ BrailleIme.prototype = { |
| onKeyEvent_: function(engineID, event) { |
| var result = this.processKey_(event); |
| if (result !== undefined) { |
| - chrome.input.ime.keyEventHandled(event.requestId, result); |
| + this.keyEventHandled_(event.requestId, event.type, result); |
| } |
| }, |
| @@ -356,7 +365,17 @@ BrailleIme.prototype = { |
| case 'keyEventHandled': |
| message = |
| /** @type {{requestId: string, result: boolean}} */ (message); |
| - chrome.input.ime.keyEventHandled(message.requestId, message.result); |
| + this.keyEventHandled_(message.requestId, 'keydown', message.result); |
| + break; |
| + case 'setComposition': |
| + message = |
| + /** @type {{contextID: number, text: string}} */ (message); |
| + this.setComposition_(message.contextID, message.text); |
| + break; |
| + case 'commitComposition': |
| + message = |
| + /** @type {{contextID: number}} */ (message); |
| + this.commitComposition_(message.contextID); |
| break; |
| default: |
| console.error('Unknown message from ChromeVox: ' + |
| @@ -430,6 +449,50 @@ BrailleIme.prototype = { |
| }, |
| /** |
| + * Responds to an asynchronous key event, indicating whether it was handled |
| + * or not. If it wasn't handled, any outstanding composition text is |
| + * committed before sending the response to the IME API. |
| + * @param {string} requestId Key even request id. |
|
David Tseng
2015/03/30 17:13:44
nit: Key event
|
| + * @param {string} type Type of key event being responded to. |
| + * @param {boolean} response Wether the IME handled theevent. |
|
David Tseng
2015/03/30 17:13:44
nit: whether ... the event
|
| + */ |
| + keyEventHandled_: function(requestId, type, response) { |
| + if (!response && type === 'keydown' && this.compositionText_) { |
| + this.commitComposition_(); |
| + this.sendToChromeVox_({type: 'reset'}); |
| + } |
| + chrome.input.ime.keyEventHandled(requestId, response); |
| + }, |
| + |
| + /** |
| + * Calls the correspnding IME API function and stores the current |
|
David Tseng
2015/03/30 17:13:44
nit: corresponding
|
| + * composition. |
| + * @param {number} contextID |
| + * @param {string} text |
| + */ |
| + setComposition_: function(contextID, text) { |
| + chrome.input.ime.setComposition({contextID: contextID, |
| + text: text, |
| + cursor: text.length}); |
| + this.compositionContextID_ = contextID; |
| + this.compositionText_ = text; |
| + }, |
| + |
| + /** |
| + * Commits the last set composition if it mathces the given context id. |
|
David Tseng
2015/03/30 17:13:44
nit: matches
|
| + * @param {number=} opt_contextID |
| + */ |
| + commitComposition_: function(opt_contextID) { |
| + if (opt_contextID === undefined || |
|
David Tseng
2015/03/30 17:13:44
Why is this optional?
|
| + opt_contextID === this.compositionContextID_) { |
| + chrome.input.ime.commitText({contextID: this.compositionContextID_, |
| + text: this.compositionText_}); |
| + } |
| + this.compositionText_ = ''; |
| + this.compositionContextID_ = 0; |
| + }, |
| + |
| + /** |
| * Updates the menu items for this IME. |
| */ |
| updateMenuItems_: function() { |