1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
/*
* BrowserTouchHandler
*
* Receives touch events from our input event capturing in input.js
* and relays appropriate events to content. Also handles requests
* from content for UI.
*/
const BrowserTouchHandler = {
_debugEvents: false,
init: function init() {
// Misc. events we catch during the bubbling phase
document.addEventListener("PopupChanged", this, false);
document.addEventListener("CancelTouchSequence", this, false);
// Messages sent from content.js
messageManager.addMessageListener("Content:ContextMenu", this);
},
// Content forwarding the contextmenu command
onContentContextMenu: function onContentContextMenu(aMessage) {
// Note, target here is the target of the message manager message,
// usually the browser.
let contextInfo = { name: aMessage.name,
json: aMessage.json,
target: aMessage.target };
// Touch input selection handling
if (!InputSourceHelper.isPrecise) {
if (SelectionHelperUI.isActive()) {
// Selection handler is active.
if (aMessage.json.types.indexOf("selected-text") != -1) {
// long tap on existing selection. The incoming message has the
// string data, so reset the selection handler and invoke the
// context menu.
SelectionHelperUI.closeEditSession();
} else {
// Weird, context menu request with no selected text and
// SelectionHelperUI is active? Might be a bug, warn. Fall
// through anyway, the context menu handler will look in the
// incoming message for content types it knows how to handle.
Util.dumpLn("long tap on empty selection with SelectionHelperUI active?");
SelectionHelperUI.closeEditSession();
}
} else if (SelectionHelperUI.canHandle(aMessage)) {
SelectionHelperUI.openEditSession(aMessage);
return;
}
}
// Check to see if we have context menu item(s) that apply to what
// was clicked on.
if (ContextMenuUI.showContextMenu(contextInfo)) {
let event = document.createEvent("Events");
event.initEvent("CancelTouchSequence", true, false);
document.dispatchEvent(event);
} else {
// Send the MozEdgeUIGesture to input.js to
// toggle the context ui.
let event = document.createEvent("Events");
event.initEvent("MozEdgeUIGesture", true, false);
window.dispatchEvent(event);
}
},
/*
* Events
*/
handleEvent: function handleEvent(aEvent) {
// ignore content events we generate
if (this._debugEvents)
Util.dumpLn("BrowserTouchHandler:", aEvent.type);
switch (aEvent.type) {
case "PopupChanged":
case "CancelTouchSequence":
if (!aEvent.detail)
ContextMenuUI.reset();
break;
}
},
receiveMessage: function receiveMessage(aMessage) {
if (this._debugEvents) Util.dumpLn("BrowserTouchHandler:", aMessage.name);
switch (aMessage.name) {
// Content forwarding the contextmenu command
case "Content:ContextMenu":
this.onContentContextMenu(aMessage);
break;
}
},
};
|