mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 13:25:37 +00:00
Bug 1189387 - Rulers button on Developers Toolbar is checked on new tabs. r=pbrosset
--HG-- extra : rebase_source : 663eeaa08b9b00a20b2a2f372057703c88053bb4
This commit is contained in:
parent
4840167c39
commit
27858f2336
@ -7,6 +7,8 @@
|
||||
const EventEmitter = require("devtools/toolkit/event-emitter");
|
||||
const eventEmitter = new EventEmitter();
|
||||
const events = require("sdk/event/core");
|
||||
const { getOuterId } = require("sdk/window/utils");
|
||||
const { getBrowserForTab } = require("sdk/tabs/utils");
|
||||
|
||||
const l10n = require("gcli/l10n");
|
||||
require("devtools/server/actors/inspector");
|
||||
@ -14,7 +16,10 @@ const { RulersHighlighter, HighlighterEnvironment } =
|
||||
require("devtools/server/actors/highlighter");
|
||||
|
||||
const highlighters = new WeakMap();
|
||||
let isRulersVisible = false;
|
||||
const visibleHighlighters = new Set();
|
||||
|
||||
const isCheckedFor = (tab) =>
|
||||
tab ? visibleHighlighters.has(getBrowserForTab(tab).outerWindowID) : false;
|
||||
|
||||
exports.items = [
|
||||
// The client rulers command is used to maintain the toolbar button state only
|
||||
@ -29,7 +34,7 @@ exports.items = [
|
||||
buttonClass: "command-button command-button-invertable",
|
||||
tooltipText: l10n.lookup("rulersTooltip"),
|
||||
state: {
|
||||
isChecked: () => isRulersVisible,
|
||||
isChecked: ({_tab}) => isCheckedFor(_tab),
|
||||
onChange: (target, handler) => eventEmitter.on("changed", handler),
|
||||
offChange: (target, handler) => eventEmitter.off("changed", handler)
|
||||
},
|
||||
@ -38,13 +43,20 @@ exports.items = [
|
||||
|
||||
// Pipe the call to the server command.
|
||||
let response = yield context.updateExec("rulers_server");
|
||||
isRulersVisible = response.data;
|
||||
let { visible, id } = response.data;
|
||||
|
||||
if (visible) {
|
||||
visibleHighlighters.add(id);
|
||||
} else {
|
||||
visibleHighlighters.delete(id);
|
||||
}
|
||||
|
||||
eventEmitter.emit("changed", { target });
|
||||
|
||||
// Toggle off the button when the page navigates because the rulers are
|
||||
// removed automatically by the RulersHighlighter on the server then.
|
||||
let onNavigate = () => {
|
||||
isRulersVisible = false;
|
||||
visibleHighlighters.delete(id);
|
||||
eventEmitter.emit("changed", { target });
|
||||
};
|
||||
target.off("will-navigate", onNavigate);
|
||||
@ -57,16 +69,18 @@ exports.items = [
|
||||
name: "rulers_server",
|
||||
runAt: "server",
|
||||
hidden: true,
|
||||
returnType: "highlighterVisibility",
|
||||
exec: function(args, context) {
|
||||
let env = context.environment;
|
||||
let { document } = env;
|
||||
let id = getOuterId(env.window);
|
||||
|
||||
// Calling the command again after the rulers have been shown once hides
|
||||
// them.
|
||||
if (highlighters.has(document)) {
|
||||
let { highlighter } = highlighters.get(document);
|
||||
highlighter.destroy();
|
||||
return false;
|
||||
return {visible: false, id};
|
||||
}
|
||||
|
||||
// Otherwise, display the rulers.
|
||||
@ -89,7 +103,7 @@ exports.items = [
|
||||
});
|
||||
|
||||
highlighter.show();
|
||||
return true;
|
||||
return {visible: true, id};
|
||||
}
|
||||
}
|
||||
];
|
||||
|
Loading…
Reference in New Issue
Block a user