1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-21 08:27:59 +01:00

Dispatch events from buffer.followLink as trusted events. Closes issue #124.

This commit is contained in:
Kris Maglione
2010-11-07 10:17:22 -05:00
parent 506c684073
commit ab81ed4cb4
4 changed files with 20 additions and 9 deletions

View File

@@ -527,7 +527,7 @@ const Buffer = Module("buffer", {
try { try {
let [x, y] = elem.getAttribute("coords").split(",").map(parseFloat); let [x, y] = elem.getAttribute("coords").split(",").map(parseFloat);
elem.dispatchEvent(events.create(elem.ownerDocument, "mouseover", { screenX: x, screenY: y })); events.dispatch(elem, events.create(elem.ownerDocument, "mouseover", { screenX: x, screenY: y }));
} }
catch (e) {} catch (e) {}
} }
@@ -608,8 +608,7 @@ const Buffer = Module("buffer", {
followLink: function (elem, where) { followLink: function (elem, where) {
let doc = elem.ownerDocument; let doc = elem.ownerDocument;
let view = doc.defaultView; let view = doc.defaultView;
let offsetX = 1; let { left: offsetX, top: offsetY } = elem.getBoundingClientRect();
let offsetY = 1;
if (isinstance(elem, [HTMLFrameElement, HTMLIFrameElement])) if (isinstance(elem, [HTMLFrameElement, HTMLIFrameElement]))
return buffer.focusElement(elem); return buffer.focusElement(elem);
@@ -646,10 +645,10 @@ const Buffer = Module("buffer", {
prefs.withContext(function () { prefs.withContext(function () {
prefs.set("browser.tabs.loadInBackground", true); prefs.set("browser.tabs.loadInBackground", true);
["mousedown", "mouseup", "click"].forEach(function (event) { ["mousedown", "mouseup"].forEach(function (event) {
elem.dispatchEvent(events.create(doc, event, { events.dispatch(elem, events.create(doc, event, {
screenX: offsetX, screenY: offsetY, screenX: offsetX, screenY: offsetY,
ctrlKey: ctrlKey, shiftKey: shiftKey, metaKey: ctrlKey ctrlKey: ctrlKey, shiftKey: shiftKey, metaKey: false
})); }));
}); });
}); });

View File

@@ -56,7 +56,7 @@ const Editor = Module("editor", {
elem.scrollLeft = curLeft; elem.scrollLeft = curLeft;
let event = elem.ownerDocument.createEvent("Event"); let event = elem.ownerDocument.createEvent("Event");
event.initEvent("input", true, false); event.initEvent("input", true, false);
elem.dispatchEvent(event); events.dispatch(elem, event);
} }
}, },

View File

@@ -289,7 +289,7 @@ const Events = Module("events", {
let duringFeed = this.duringFeed; let duringFeed = this.duringFeed;
this.duringFeed = []; this.duringFeed = [];
for (let [, evt] in Iterator(duringFeed)) for (let [, evt] in Iterator(duringFeed))
evt.target.dispatchEvent(evt); events.dispatch(evt.target, evt);
} }
} }
}, },
@@ -358,6 +358,18 @@ const Events = Module("events", {
return events.fromString(keys).map(events.closure.toString).join(""); return events.fromString(keys).map(events.closure.toString).join("");
}, },
/**
* Dispatches an event to an element as if it were a native event.
*
* @param {Node} target The DOM node to which to dispatch the event.
* @param {Event} event The event to dispatch.
*/
dispatch: function (target, event) {
return target.ownerDocument.defaultView
.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils)
.dispatchDOMEventViaPresShell(target, event, true);
},
/** /**
* Converts an event string into an array of pseudo-event objects. * Converts an event string into an array of pseudo-event objects.
* *

View File

@@ -1046,7 +1046,7 @@ const Tabs = Module("tabs", {
"stringlist", "tab", "stringlist", "tab",
{ {
setter: function (values) { setter: function (values) {
let [open, restriction] = [1, 0]; let open = 1, restriction = 0;
for (let [, opt] in Iterator(values)) { for (let [, opt] in Iterator(values)) {
if (opt == "tab") if (opt == "tab")
open = 3; open = 3;