зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1409085 - Tell RDM when picking to stop simulating touch; r=mtigley,gl
Differential Revision: https://phabricator.services.mozilla.com/D25231 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
d00c43f033
Коммит
bcfd6cd961
|
@ -64,6 +64,8 @@ loader.lazyRequireGetter(this, "createEditContextMenu",
|
||||||
"devtools/client/framework/toolbox-context-menu", true);
|
"devtools/client/framework/toolbox-context-menu", true);
|
||||||
loader.lazyRequireGetter(this, "remoteClientManager",
|
loader.lazyRequireGetter(this, "remoteClientManager",
|
||||||
"devtools/client/shared/remote-debugging/remote-client-manager.js", true);
|
"devtools/client/shared/remote-debugging/remote-client-manager.js", true);
|
||||||
|
loader.lazyRequireGetter(this, "ResponsiveUIManager",
|
||||||
|
"devtools/client/responsive.html/manager", true);
|
||||||
|
|
||||||
loader.lazyGetter(this, "domNodeConstants", () => {
|
loader.lazyGetter(this, "domNodeConstants", () => {
|
||||||
return require("devtools/shared/dom-node-constants");
|
return require("devtools/shared/dom-node-constants");
|
||||||
|
@ -1343,6 +1345,7 @@ Toolbox.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
_onPickerStarting: async function() {
|
_onPickerStarting: async function() {
|
||||||
|
this.tellRDMAboutPickerState(true);
|
||||||
this.pickerButton.isChecked = true;
|
this.pickerButton.isChecked = true;
|
||||||
await this.selectTool("inspector", "inspect_dom");
|
await this.selectTool("inspector", "inspect_dom");
|
||||||
this.on("select", this.inspector.nodePicker.stop);
|
this.on("select", this.inspector.nodePicker.stop);
|
||||||
|
@ -1354,11 +1357,31 @@ Toolbox.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
_onPickerStopped: function() {
|
_onPickerStopped: function() {
|
||||||
|
this.tellRDMAboutPickerState(false);
|
||||||
this.off("select", this.inspector.nodePicker.stop);
|
this.off("select", this.inspector.nodePicker.stop);
|
||||||
this.doc.removeEventListener("keypress", this._onPickerKeypress, true);
|
this.doc.removeEventListener("keypress", this._onPickerKeypress, true);
|
||||||
this.pickerButton.isChecked = false;
|
this.pickerButton.isChecked = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RDM sometimes simulates touch events. For this to work correctly at all times, it
|
||||||
|
* needs to know when the picker is active or not.
|
||||||
|
* This method communicates with the RDM Manager if it exists.
|
||||||
|
*
|
||||||
|
* @param {Boolean} state
|
||||||
|
*/
|
||||||
|
tellRDMAboutPickerState: async function(state) {
|
||||||
|
const { tab } = this.target;
|
||||||
|
|
||||||
|
if (!ResponsiveUIManager.isActiveForTab(tab) ||
|
||||||
|
await !this.target.actorHasMethod("emulation", "setElementPickerState")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ui = ResponsiveUIManager.getResponsiveUIForTab(tab);
|
||||||
|
await ui.emulationFront.setElementPickerState(state);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When the picker is canceled, make sure the toolbox
|
* When the picker is canceled, make sure the toolbox
|
||||||
* gets the focus.
|
* gets the focus.
|
||||||
|
|
|
@ -177,6 +177,30 @@ const EmulationActor = protocol.ActorClassWithSpec(emulationSpec, {
|
||||||
|
|
||||||
_previousTouchEventsOverride: undefined,
|
_previousTouchEventsOverride: undefined,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current element picker state.
|
||||||
|
*
|
||||||
|
* True means the element picker is currently active and we should not be emulating
|
||||||
|
* touch events.
|
||||||
|
* False means the element picker is not active and it is ok to emulate touch events.
|
||||||
|
*
|
||||||
|
* This actor method is meant to be called by the DevTools front-end. The reason for
|
||||||
|
* this is the following:
|
||||||
|
* RDM is the only current consumer of the touch simulator. RDM instantiates this actor
|
||||||
|
* on its own, whether or not the Toolbox is opened. That means it does so in its own
|
||||||
|
* Debugger Server instance.
|
||||||
|
* When the Toolbox is running, it uses a different DebuggerServer. Therefore, it is not
|
||||||
|
* possible for the touch simulator to know whether the picker is active or not. This
|
||||||
|
* state has to be sent by the client code of the Toolbox to this actor.
|
||||||
|
* If a future use case arises where we want to use the touch simulator from the Toolbox
|
||||||
|
* too, then we could add code in here to detect the picker mode as described in
|
||||||
|
* https://bugzilla.mozilla.org/show_bug.cgi?id=1409085#c3
|
||||||
|
* @param {Boolean} state
|
||||||
|
*/
|
||||||
|
setElementPickerState(state) {
|
||||||
|
this.touchSimulator.setElementPickerState(state);
|
||||||
|
},
|
||||||
|
|
||||||
setTouchEventsOverride(flag) {
|
setTouchEventsOverride(flag) {
|
||||||
if (this.getTouchEventsOverride() == flag) {
|
if (this.getTouchEventsOverride() == flag) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -73,7 +73,23 @@ TouchSimulator.prototype = {
|
||||||
this.enabled = false;
|
this.enabled = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current element picker state value.
|
||||||
|
* True means the element picker is currently active and we should not be emulating
|
||||||
|
* touch events.
|
||||||
|
* False means the element picker is not active and it is ok to emulate touch events.
|
||||||
|
* @param {Boolean} state
|
||||||
|
*/
|
||||||
|
setElementPickerState(state) {
|
||||||
|
this._isPicking = state;
|
||||||
|
},
|
||||||
|
|
||||||
handleEvent(evt) {
|
handleEvent(evt) {
|
||||||
|
// Bail out if devtools is in pick mode in the same tab.
|
||||||
|
if (this._isPicking) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// The gaia system window use an hybrid system even on the device which is
|
// The gaia system window use an hybrid system even on the device which is
|
||||||
// a mix of mouse/touch events. So let's not cancel *all* mouse events
|
// a mix of mouse/touch events. So let's not cancel *all* mouse events
|
||||||
// if it is the current target.
|
// if it is the current target.
|
||||||
|
|
|
@ -123,6 +123,13 @@ const emulationSpec = generateActorSpec({
|
||||||
valueChanged: RetVal("boolean"),
|
valueChanged: RetVal("boolean"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setElementPickerState: {
|
||||||
|
request: {
|
||||||
|
state: Arg(0, "boolean"),
|
||||||
|
},
|
||||||
|
response: {},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче