OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview Handles automation from a desktop automation node. | 6 * @fileoverview Handles automation from a desktop automation node. |
7 */ | 7 */ |
8 | 8 |
9 goog.provide('DesktopAutomationHandler'); | 9 goog.provide('DesktopAutomationHandler'); |
10 | 10 |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 */ | 169 */ |
170 onEventIfSelected: function(evt) { | 170 onEventIfSelected: function(evt) { |
171 if (evt.target.state.selected) | 171 if (evt.target.state.selected) |
172 this.onEventDefault(evt); | 172 this.onEventDefault(evt); |
173 }, | 173 }, |
174 | 174 |
175 /** | 175 /** |
176 * @param {!AutomationEvent} evt | 176 * @param {!AutomationEvent} evt |
177 */ | 177 */ |
178 onEventWithFlushedOutput: function(evt) { | 178 onEventWithFlushedOutput: function(evt) { |
179 Output.flushNextSpeechUtterance(); | 179 Output.forceModeForNextSpeechUtterance(cvox.QueueMode.FLUSH); |
180 this.onEventDefault(evt); | 180 this.onEventDefault(evt); |
181 }, | 181 }, |
182 | 182 |
183 /** | 183 /** |
184 * @param {!AutomationEvent} evt | 184 * @param {!AutomationEvent} evt |
185 */ | 185 */ |
186 onHover: function(evt) { | 186 onHover: function(evt) { |
187 if (ChromeVoxState.instance.currentRange && | 187 if (ChromeVoxState.instance.currentRange && |
188 evt.target == ChromeVoxState.instance.currentRange.start.node) | 188 evt.target == ChromeVoxState.instance.currentRange.start.node) |
189 return; | 189 return; |
190 Output.flushNextSpeechUtterance(); | 190 Output.forceModeForNextSpeechUtterance(cvox.QueueMode.FLUSH); |
191 this.onEventDefault(evt); | 191 this.onEventDefault(evt); |
192 }, | 192 }, |
193 | 193 |
194 /** | 194 /** |
195 * Makes an announcement without changing focus. | 195 * Makes an announcement without changing focus. |
196 * @param {!AutomationEvent} evt | 196 * @param {!AutomationEvent} evt |
197 */ | 197 */ |
198 onActiveDescendantChanged: function(evt) { | 198 onActiveDescendantChanged: function(evt) { |
199 if (!evt.target.activeDescendant || !evt.target.state.focused) | 199 if (!evt.target.activeDescendant || !evt.target.state.focused) |
200 return; | 200 return; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 this.textEditHandler_ = null; | 244 this.textEditHandler_ = null; |
245 | 245 |
246 var node = evt.target; | 246 var node = evt.target; |
247 | 247 |
248 // Discard focus events on embeddedObject and client nodes. | 248 // Discard focus events on embeddedObject and client nodes. |
249 if (node.role == RoleType.embeddedObject || node.role == RoleType.client) | 249 if (node.role == RoleType.embeddedObject || node.role == RoleType.client) |
250 return; | 250 return; |
251 | 251 |
252 this.createTextEditHandlerIfNeeded_(evt.target); | 252 this.createTextEditHandlerIfNeeded_(evt.target); |
253 | 253 |
254 // Since we queue output mostly for live regions support and there isn't a | 254 // Category flush speech triggered by events with no source. This includes |
255 // reliable way to know if this focus event resulted from a user's explicit | 255 // views. |
256 // action, only flush when the focused node is not web content. | 256 if (evt.eventFrom == '') |
257 if (node.root.role == RoleType.desktop) | 257 Output.forceModeForNextSpeechUtterance(cvox.QueueMode.CATEGORY_FLUSH); |
258 Output.flushNextSpeechUtterance(); | |
259 | |
260 this.onEventDefault(new chrome.automation.AutomationEvent( | 258 this.onEventDefault(new chrome.automation.AutomationEvent( |
261 EventType.focus, node, evt.eventFrom)); | 259 EventType.focus, node, evt.eventFrom)); |
262 }, | 260 }, |
263 | 261 |
264 /** | 262 /** |
265 * Provides all feedback once a load complete event fires. | 263 * Provides all feedback once a load complete event fires. |
266 * @param {!AutomationEvent} evt | 264 * @param {!AutomationEvent} evt |
267 */ | 265 */ |
268 onLoadComplete: function(evt) { | 266 onLoadComplete: function(evt) { |
269 // Don't process nodes inside of web content if ChromeVox Next is inactive. | 267 // Don't process nodes inside of web content if ChromeVox Next is inactive. |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 /** | 415 /** |
418 * @param {!AutomationEvent} evt | 416 * @param {!AutomationEvent} evt |
419 */ | 417 */ |
420 onSelection: function(evt) { | 418 onSelection: function(evt) { |
421 chrome.automation.getFocus(function(focus) { | 419 chrome.automation.getFocus(function(focus) { |
422 // Some cases (e.g. in overview mode), require overriding the assumption | 420 // Some cases (e.g. in overview mode), require overriding the assumption |
423 // that focus is an ancestor of a selection target. | 421 // that focus is an ancestor of a selection target. |
424 var override = evt.target.role == RoleType.menuItem || | 422 var override = evt.target.role == RoleType.menuItem || |
425 (evt.target.root == focus.root && | 423 (evt.target.root == focus.root && |
426 focus.root.role == RoleType.desktop); | 424 focus.root.role == RoleType.desktop); |
427 Output.flushNextSpeechUtterance(); | 425 Output.forceModeForNextSpeechUtterance(cvox.QueueMode.FLUSH); |
428 if (override || AutomationUtil.isDescendantOf(evt.target, focus)) | 426 if (override || AutomationUtil.isDescendantOf(evt.target, focus)) |
429 this.onEventDefault(evt); | 427 this.onEventDefault(evt); |
430 }.bind(this)); | 428 }.bind(this)); |
431 }, | 429 }, |
432 | 430 |
433 /** | 431 /** |
434 * Provides all feedback once a menu start event fires. | 432 * Provides all feedback once a menu start event fires. |
435 * @param {!AutomationEvent} evt | 433 * @param {!AutomationEvent} evt |
436 */ | 434 */ |
437 onMenuStart: function(evt) { | 435 onMenuStart: function(evt) { |
(...skipping 29 matching lines...) Expand all Loading... |
467 DesktopAutomationHandler.init_ = function() { | 465 DesktopAutomationHandler.init_ = function() { |
468 chrome.automation.getDesktop(function(desktop) { | 466 chrome.automation.getDesktop(function(desktop) { |
469 ChromeVoxState.desktopAutomationHandler = | 467 ChromeVoxState.desktopAutomationHandler = |
470 new DesktopAutomationHandler(desktop); | 468 new DesktopAutomationHandler(desktop); |
471 }); | 469 }); |
472 }; | 470 }; |
473 | 471 |
474 DesktopAutomationHandler.init_(); | 472 DesktopAutomationHandler.init_(); |
475 | 473 |
476 }); // goog.scope | 474 }); // goog.scope |
OLD | NEW |