Bug 1189387 - Rulers button on Developers Toolbar is checked on new tabs. r=pbrosset

--HG--
extra : rebase_source : 663eeaa08b9b00a20b2a2f372057703c88053bb4
This commit is contained in:
Matteo Ferretti 2015-08-20 08:43:00 -04:00
parent 4840167c39
commit 27858f2336

View File

@ -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};
}
}
];