Bug 865452 - Don't capture scripted mouse events. r=yzen
--- a/accessible/src/jsat/TouchAdapter.jsm
+++ b/accessible/src/jsat/TouchAdapter.jsm
@@ -101,16 +101,20 @@ this.TouchAdapter = {
handleEvent: function TouchAdapter_handleEvent(aEvent) {
// Don't bother with chrome mouse events.
if (Utils.MozBuildApp == 'browser' &&
aEvent.view.top instanceof Ci.nsIDOMChromeWindow) {
return;
}
+ if (aEvent.mozInputSource == Ci.nsIDOMMouseEvent.MOZ_SOURCE_UNKNOWN) {
+ return;
+ }
+
if (this._delayedEvent) {
Utils.win.clearTimeout(this._delayedEvent);
delete this._delayedEvent;
}
let changedTouches = aEvent.changedTouches || [aEvent];
// XXX: Until bug 77992 is resolved, on desktop we get microseconds
--- a/accessible/src/jsat/content-script.js
+++ b/accessible/src/jsat/content-script.js
@@ -116,20 +116,27 @@ function activateCurrent(aMessage) {
docAcc.getBounds(docX, docY, docW, docH);
let objX = {}, objY = {}, objW = {}, objH = {};
aAccessible.getBounds(objX, objY, objW, objH);
let x = Math.round((objX.value - docX.value) + objW.value / 2);
let y = Math.round((objY.value - docY.value) + objH.value / 2);
- let cwu = content.QueryInterface(Ci.nsIInterfaceRequestor).
- getInterface(Ci.nsIDOMWindowUtils);
- cwu.sendMouseEventToWindow('mousedown', x, y, 0, 1, 0, false);
- cwu.sendMouseEventToWindow('mouseup', x, y, 0, 1, 0, false);
+ let node = aAccessible.DOMNode || aAccessible.parent.DOMNode;
+
+ function dispatchMouseEvent(aEventType) {
+ let evt = content.document.createEvent("MouseEvents");
+ evt.initMouseEvent(aEventType, true, true, content,
+ x, y, 0, 0, 0, false, false, false, false, 0, null);
+ node.dispatchEvent(evt);
+ }
+
+ dispatchMouseEvent("mousedown");
+ dispatchMouseEvent("mouseup");
}
}
let vc = Utils.getVirtualCursor(content.document);
if (!forwardMessage(vc, aMessage))
activateAccessible(vc.position);
}