michael@0: /* michael@0: * BrowserTouchHandler michael@0: * michael@0: * Receives touch events from our input event capturing in input.js michael@0: * and relays appropriate events to content. Also handles requests michael@0: * from content for UI. michael@0: */ michael@0: michael@0: const BrowserTouchHandler = { michael@0: _debugEvents: false, michael@0: michael@0: init: function init() { michael@0: // Misc. events we catch during the bubbling phase michael@0: document.addEventListener("PopupChanged", this, false); michael@0: document.addEventListener("CancelTouchSequence", this, false); michael@0: michael@0: // Messages sent from content.js michael@0: messageManager.addMessageListener("Content:ContextMenu", this); michael@0: messageManager.addMessageListener("Content:SelectionCaret", this); michael@0: }, michael@0: michael@0: // Content forwarding the contextmenu command michael@0: _onContentContextMenu: function _onContentContextMenu(aMessage) { michael@0: // Note, target here is the target of the message manager message, michael@0: // usually the browser. michael@0: // Touch input selection handling michael@0: if (!InputSourceHelper.isPrecise && michael@0: !SelectionHelperUI.isActive && michael@0: SelectionHelperUI.canHandleContextMenuMsg(aMessage)) { michael@0: SelectionHelperUI.openEditSession(aMessage.target, michael@0: aMessage.json.xPos, michael@0: aMessage.json.yPos); michael@0: return; michael@0: } michael@0: michael@0: // Check to see if we have context menu item(s) that apply to what michael@0: // was clicked on. michael@0: let contextInfo = { name: aMessage.name, michael@0: json: aMessage.json, michael@0: target: aMessage.target }; michael@0: if (ContextMenuUI.showContextMenu(contextInfo)) { michael@0: let event = document.createEvent("Events"); michael@0: event.initEvent("CancelTouchSequence", true, false); michael@0: document.dispatchEvent(event); michael@0: } else { michael@0: // Send the MozEdgeUIGesture to input.js to michael@0: // toggle the context ui. michael@0: let event = document.createEvent("Events"); michael@0: event.initEvent("MozEdgeUICompleted", true, false); michael@0: window.dispatchEvent(event); michael@0: } michael@0: }, michael@0: michael@0: /* michael@0: * Called when Content wants to initiate selection management michael@0: * due to a tap in a form input. michael@0: */ michael@0: _onCaretSelectionStarted: function _onCaretSelectionStarted(aMessage) { michael@0: SelectionHelperUI.attachToCaret(aMessage.target, michael@0: aMessage.json.xPos, michael@0: aMessage.json.yPos); michael@0: }, michael@0: michael@0: /* michael@0: * Events michael@0: */ michael@0: michael@0: handleEvent: function handleEvent(aEvent) { michael@0: // ignore content events we generate michael@0: if (aEvent.target == document) michael@0: return; michael@0: michael@0: if (this._debugEvents) michael@0: Util.dumpLn("BrowserTouchHandler:", aEvent.type); michael@0: michael@0: switch (aEvent.type) { michael@0: case "PopupChanged": michael@0: case "CancelTouchSequence": michael@0: if (!aEvent.detail) michael@0: ContextMenuUI.reset(); michael@0: break; michael@0: } michael@0: }, michael@0: michael@0: receiveMessage: function receiveMessage(aMessage) { michael@0: if (this._debugEvents) Util.dumpLn("BrowserTouchHandler:", aMessage.name); michael@0: switch (aMessage.name) { michael@0: // Content forwarding the contextmenu command michael@0: case "Content:ContextMenu": michael@0: this._onContentContextMenu(aMessage); michael@0: break; michael@0: case "Content:SelectionCaret": michael@0: this._onCaretSelectionStarted(aMessage); michael@0: break; michael@0: } michael@0: }, michael@0: };