Bug 965628 - Clear cursor when leaving iframe. r=yzen

This commit is contained in:
Eitan Isaacson 2014-02-11 10:41:02 -08:00
Родитель ed9a2c503a
Коммит b4e5b84551
2 изменённых файлов: 25 добавлений и 4 удалений

Просмотреть файл

@ -155,12 +155,18 @@ this.EventManager.prototype = {
let event = aEvent.
QueryInterface(Ci.nsIAccessibleVirtualCursorChangeEvent);
let reason = event.reason;
let oldAccessible = event.oldAccessible;
if (oldAccessible && oldAccessible.role == Roles.INTERNAL_FRAME) {
let mm = Utils.getMessageManager(oldAccessible.DOMNode);
mm.sendAsyncMessage('AccessFu:ClearCursor', {});
}
if (this.editState.editing) {
aEvent.accessibleDocument.takeFocus();
}
this.present(
Presentation.pivotChanged(position, event.oldAccessible, reason,
Presentation.pivotChanged(position, oldAccessible, reason,
pivot.startOffset, pivot.endOffset));
break;
@ -184,7 +190,7 @@ this.EventManager.prototype = {
}
case Events.SCROLLING_START:
{
let vc = Utils.getVirtualCursor(aEvent.accessibleDocument);
let vc = Utils.getVirtualCursor(this.contentScope.content.document);
vc.moveNext(TraversalRules.Simple, aEvent.accessible, true);
break;
}
@ -283,7 +289,7 @@ this.EventManager.prototype = {
case Events.DOCUMENT_LOAD_COMPLETE:
{
this._autoMove = this.contentScope.content.setTimeout(() => {
Utils.getVirtualCursor(aEvent.accessibleDocument)
Utils.getVirtualCursor(this.contentScope.content.document)
.moveNext(TraversalRules.Simple, aEvent.accessible, true);
}, 500);
break;

Просмотреть файл

@ -27,6 +27,15 @@ Logger.debug('content-script.js');
let eventManager = null;
function clearCursor(aMessage) {
try {
Utils.getVirtualCursor(content.document).position = null;
forwardToChild(aMessage);
} catch (x) {
Logger.logException(x);
}
}
function moveCursor(aMessage) {
if (Logger.logLevel >= Logger.DEBUG) {
Logger.debug(aMessage.name, JSON.stringify(aMessage.json, null, ' '));
@ -144,7 +153,11 @@ function forwardToChild(aMessage, aListener, aVCPosition) {
}
let mm = Utils.getMessageManager(acc.DOMNode);
mm.addMessageListener(aMessage.name, aListener);
if (aListener) {
mm.addMessageListener(aMessage.name, aListener);
}
// XXX: This is a silly way to make a deep copy
let newJSON = JSON.parse(JSON.stringify(aMessage.json));
newJSON.origin = 'parent';
@ -381,6 +394,7 @@ addMessageListener(
addMessageListener('AccessFu:AdjustRange', adjustRange);
addMessageListener('AccessFu:MoveCaret', moveCaret);
addMessageListener('AccessFu:MoveByGranularity', moveByGranularity);
addMessageListener('AccessFu:ClearCursor', clearCursor);
if (!eventManager) {
eventManager = new EventManager(this);
@ -401,6 +415,7 @@ addMessageListener(
removeMessageListener('AccessFu:Scroll', scroll);
removeMessageListener('AccessFu:MoveCaret', moveCaret);
removeMessageListener('AccessFu:MoveByGranularity', moveByGranularity);
removeMessageListener('AccessFu:ClearCursor', clearCursor);
eventManager.stop();
});