summaryrefslogtreecommitdiffstats
path: root/comm/mail/modules/UIDensity.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/modules/UIDensity.jsm')
-rw-r--r--comm/mail/modules/UIDensity.jsm76
1 files changed, 76 insertions, 0 deletions
diff --git a/comm/mail/modules/UIDensity.jsm b/comm/mail/modules/UIDensity.jsm
new file mode 100644
index 0000000000..be94ed1408
--- /dev/null
+++ b/comm/mail/modules/UIDensity.jsm
@@ -0,0 +1,76 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const EXPORTED_SYMBOLS = ["UIDensity"];
+
+const { XPCOMUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/XPCOMUtils.sys.mjs"
+);
+
+var registeredWindows = new Set();
+
+function updateWindow(win) {
+ switch (UIDensity.prefValue) {
+ case UIDensity.MODE_COMPACT:
+ win.document.documentElement.setAttribute("uidensity", "compact");
+ break;
+ case UIDensity.MODE_TOUCH:
+ win.document.documentElement.setAttribute("uidensity", "touch");
+ break;
+ default:
+ win.document.documentElement.removeAttribute("uidensity");
+ break;
+ }
+
+ if (win.TabsInTitlebar !== undefined) {
+ win.TabsInTitlebar.update();
+ }
+
+ win.dispatchEvent(
+ new win.CustomEvent("uidensitychange", { detail: UIDensity.prefValue })
+ );
+}
+
+function updateAllWindows() {
+ for (let win of registeredWindows) {
+ updateWindow(win);
+ }
+}
+
+var UIDensity = {
+ MODE_COMPACT: 0,
+ MODE_NORMAL: 1,
+ MODE_TOUCH: 2,
+
+ prefName: "mail.uidensity",
+
+ /**
+ * Set the UI density.
+ *
+ * @param {integer} mode - One of the MODE constants.
+ */
+ setMode(mode) {
+ Services.prefs.setIntPref(this.prefName, mode);
+ },
+
+ /**
+ * Register a window to be updated if the mode ever changes. The current
+ * value is applied to the window. Deregistration is automatic.
+ *
+ * @param {Window} win
+ */
+ registerWindow(win) {
+ registeredWindows.add(win);
+ win.addEventListener("unload", () => registeredWindows.delete(win));
+ updateWindow(win);
+ },
+};
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ UIDensity,
+ "prefValue",
+ UIDensity.prefName,
+ null,
+ updateAllWindows
+);