зеркало из https://github.com/mozilla/gecko-dev.git
92 строки
3.0 KiB
JavaScript
92 строки
3.0 KiB
JavaScript
|
/*
|
||
|
* 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) {
|
||
|
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;
|
||
|
}
|
||
|
},
|
||
|
};
|