зеркало из https://github.com/mozilla/gecko-dev.git
Bug 465284: Open link in new tab [r=mark.finkle]
This commit is contained in:
Родитель
e041a0bc56
Коммит
0c4b89027a
|
@ -406,9 +406,10 @@ InputHandler.EventInfo.prototype = {
|
|||
* customClicker will be notified. The customClicker must support the following
|
||||
* interface:
|
||||
*
|
||||
* singleClick(cx, cy)
|
||||
* singleClick(cx, cy, modifiers)
|
||||
* Signals a single (as opposed to double) click occured at client
|
||||
* coordinates cx, cy
|
||||
* coordinates cx, cy. Specify optional modifiers to include
|
||||
* shift-keys with click.
|
||||
*
|
||||
* doubleClick(cx1, cy1, cx2, cy2)
|
||||
* Signals a doubleclick occured, with the first click at client coordinates
|
||||
|
@ -689,7 +690,14 @@ MouseModule.prototype = {
|
|||
|
||||
let ev = this._downUpEvents[1].event;
|
||||
this._cleanClickBuffer(2);
|
||||
this._clicker.singleClick(ev.clientX, ev.clientY);
|
||||
|
||||
// borrowed from nsIDOMNSEvent.idl
|
||||
let modifiers =
|
||||
(ev.altKey ? Ci.nsIDOMNSEvent.ALT_MASK : 0) |
|
||||
(ev.ctrlKey ? Ci.nsIDOMNSEvent.CONTROL_MASK : 0) |
|
||||
(ev.shiftKey ? Ci.nsIDOMNSEvent.SHIFT_MASK : 0) |
|
||||
(ev.metaKey ? Ci.nsIDOMNSEvent.META_MASK : 0);
|
||||
this._clicker.singleClick(ev.clientX, ev.clientY, modifiers);
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -85,6 +85,28 @@ let Util = {
|
|||
aFunc();
|
||||
}
|
||||
}, Ci.nsIThread.DISPATCH_NORMAL);
|
||||
},
|
||||
|
||||
getHrefForElement: function getHrefForElement(target) {
|
||||
// XXX: This is kind of a hack to work around a Gecko bug (see bug 266932)
|
||||
// We're going to walk up the DOM looking for a parent link node.
|
||||
// This shouldn't be necessary, but we're matching the existing behaviour for left click
|
||||
|
||||
let link = null;
|
||||
while (target) {
|
||||
if (target instanceof HTMLAnchorElement ||
|
||||
target instanceof HTMLAreaElement ||
|
||||
target instanceof HTMLLinkElement) {
|
||||
if (target.hasAttribute("href"))
|
||||
link = target;
|
||||
}
|
||||
target = target.parentNode;
|
||||
}
|
||||
|
||||
if (link && link.hasAttribute("href"))
|
||||
return link.href;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -1524,9 +1524,18 @@ ContentCustomClicker.prototype = {
|
|||
mouseUp: function mouseUp(cX, cY) {
|
||||
},
|
||||
|
||||
singleClick: function singleClick(cX, cY) {
|
||||
this._dispatchMouseEvent("mousedown", cX, cY);
|
||||
this._dispatchMouseEvent("mouseup", cX, cY);
|
||||
singleClick: function singleClick(cX, cY, modifiers) {
|
||||
if (modifiers == 0) {
|
||||
this._dispatchMouseEvent("mousedown", cX, cY);
|
||||
this._dispatchMouseEvent("mouseup", cX, cY);
|
||||
}
|
||||
else if (modifiers == Ci.nsIDOMNSEvent.CONTROL_MASK) {
|
||||
let [elementX, elementY] = Browser.transformClientToBrowser(cX, cY);
|
||||
let element = Browser.elementFromPoint(elementX, elementY);
|
||||
let uri = Util.getHrefForElement(element);
|
||||
if (uri)
|
||||
Browser.addTab(uri, false);
|
||||
}
|
||||
},
|
||||
|
||||
doubleClick: function doubleClick(cX1, cY1, cX2, cY2) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче