mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1158377 - Make link drag-and-drop work with view source windows opened on remote browsers. r=jryans.
This commit is contained in:
parent
fab2ffb300
commit
5e923b0141
@ -108,6 +108,8 @@ let ViewSourceChrome = {
|
||||
removeEventListener("MozSwipeGesture", this, true);
|
||||
gContextMenu.removeEventListener("popupshowing", this);
|
||||
gContextMenu.removeEventListener("popuphidden", this);
|
||||
Services.els.removeSystemEventListener(gBrowser, "dragover", this, true);
|
||||
Services.els.removeSystemEventListener(gBrowser, "drop", this, true);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -172,6 +174,12 @@ let ViewSourceChrome = {
|
||||
case "popuphidden":
|
||||
this.onContextMenuHidden(event);
|
||||
break;
|
||||
case "dragover":
|
||||
this.onDragOver(event);
|
||||
break;
|
||||
case "drop":
|
||||
this.onDrop(event);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
@ -259,6 +267,9 @@ let ViewSourceChrome = {
|
||||
gContextMenu.addEventListener("popupshowing", this);
|
||||
gContextMenu.addEventListener("popuphidden", this);
|
||||
|
||||
Services.els.addSystemEventListener(gBrowser, "dragover", this, true);
|
||||
Services.els.addSystemEventListener(gBrowser, "drop", this, true);
|
||||
|
||||
if (!this.historyEnabled) {
|
||||
// Disable the BACK and FORWARD commands and hide the related menu items.
|
||||
let viewSourceNavigation = document.getElementById("viewSourceNavigation");
|
||||
@ -501,6 +512,51 @@ let ViewSourceChrome = {
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Called when the user drags something over the content browser.
|
||||
*/
|
||||
onDragOver(event) {
|
||||
// For drags that appear to be internal text (for example, tab drags),
|
||||
// set the dropEffect to 'none'. This prevents the drop even if some
|
||||
// other listener cancelled the event.
|
||||
let types = event.dataTransfer.types;
|
||||
if (types.contains("text/x-moz-text-internal") && !types.contains("text/plain")) {
|
||||
event.dataTransfer.dropEffect = "none";
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
let linkHandler = Cc["@mozilla.org/content/dropped-link-handler;1"]
|
||||
.getService(Ci.nsIDroppedLinkHandler);
|
||||
|
||||
if (linkHandler.canDropLink(event, false)) {
|
||||
event.preventDefault();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Called twhen the user drops something onto the content browser.
|
||||
*/
|
||||
onDrop(event) {
|
||||
if (event.defaultPrevented)
|
||||
return;
|
||||
|
||||
let name = { };
|
||||
let linkHandler = Cc["@mozilla.org/content/dropped-link-handler;1"]
|
||||
.getService(Ci.nsIDroppedLinkHandler);
|
||||
let uri;
|
||||
try {
|
||||
// Pass true to prevent the dropping of javascript:/data: URIs
|
||||
uri = linkHandler.dropLink(event, name, true);
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (uri) {
|
||||
this.loadURL(uri);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* For remote browsers, the contextmenu event is received in the
|
||||
* content process, and a message is sent up from the frame script
|
||||
|
Loading…
Reference in New Issue
Block a user