diff options
Diffstat (limited to 'browser/base/content/browser-tabsintitlebar.js')
-rw-r--r-- | browser/base/content/browser-tabsintitlebar.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js new file mode 100644 index 0000000000..caf9986b2f --- /dev/null +++ b/browser/base/content/browser-tabsintitlebar.js @@ -0,0 +1,92 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- + * 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/. */ + +var TabsInTitlebar = { + init() { + this._readPref(); + Services.prefs.addObserver(this._prefName, this); + + this._initialized = true; + this._update(); + }, + + allowedBy(condition, allow) { + if (allow) { + if (condition in this._disallowed) { + delete this._disallowed[condition]; + this._update(); + } + } else if (!(condition in this._disallowed)) { + this._disallowed[condition] = null; + this._update(); + } + }, + + get systemSupported() { + let isSupported = false; + switch (AppConstants.MOZ_WIDGET_TOOLKIT) { + case "windows": + case "cocoa": + isSupported = true; + break; + case "gtk": + isSupported = window.matchMedia("(-moz-gtk-csd-available)").matches; + break; + } + delete this.systemSupported; + return (this.systemSupported = isSupported); + }, + + get enabled() { + return document.documentElement.getAttribute("tabsintitlebar") == "true"; + }, + + observe(subject, topic, data) { + if (topic == "nsPref:changed") { + this._readPref(); + } + }, + + _initialized: false, + _disallowed: {}, + _prefName: "browser.tabs.inTitlebar", + + _readPref() { + let hiddenTitlebar = Services.appinfo.drawInTitlebar; + this.allowedBy("pref", hiddenTitlebar); + }, + + _update() { + if (!this._initialized) { + return; + } + + let allowed = + this.systemSupported && + !window.fullScreen && + !Object.keys(this._disallowed).length; + if (allowed) { + document.documentElement.setAttribute("tabsintitlebar", "true"); + if (AppConstants.platform == "macosx") { + document.documentElement.setAttribute("chromemargin", "0,-1,-1,-1"); + document.documentElement.removeAttribute("drawtitle"); + } else { + document.documentElement.setAttribute("chromemargin", "0,2,2,2"); + } + } else { + document.documentElement.removeAttribute("tabsintitlebar"); + document.documentElement.removeAttribute("chromemargin"); + if (AppConstants.platform == "macosx") { + document.documentElement.setAttribute("drawtitle", "true"); + } + } + + ToolbarIconColor.inferFromText("tabsintitlebar", allowed); + }, + + uninit() { + Services.prefs.removeObserver(this._prefName, this); + }, +}; |