summaryrefslogtreecommitdiffstats
path: root/comm/suite/browser/fullScreen.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--comm/suite/browser/fullScreen.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/comm/suite/browser/fullScreen.js b/comm/suite/browser/fullScreen.js
new file mode 100644
index 0000000000..30a666cf57
--- /dev/null
+++ b/comm/suite/browser/fullScreen.js
@@ -0,0 +1,107 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 FullScreen =
+{
+ toggle: function()
+ {
+ var show = !window.fullScreen;
+ // show/hide all menubars, toolbars, and statusbars (except the full screen toolbar)
+ this.showXULChrome("toolbar", show);
+ this.showXULChrome("statusbar", show);
+
+ var toolbox = getNavToolbox();
+ if (show)
+ toolbox.removeAttribute("inFullscreen");
+ else
+ toolbox.setAttribute("inFullscreen", true);
+
+ var controls = document.getElementsByAttribute("fullscreencontrol", "true");
+ for (let i = 0; i < controls.length; ++i)
+ controls[i].hidden = show;
+
+ controls = document.getElementsByAttribute("domfullscreenhidden", "true");
+ if (document.mozFullScreen) {
+ for (let i = 0; i < controls.length; ++i)
+ controls[i].setAttribute("moz-collapsed", "true");
+ getBrowser().mStrip.setAttribute("moz-collapsed", "true");
+ } else {
+ for (let i = 0; i < controls.length; ++i)
+ controls[i].removeAttribute("moz-collapsed");
+ getBrowser().mStrip.removeAttribute("moz-collapsed");
+ }
+ getBrowser().getNotificationBox().notificationsHidden = document.mozFullScreen;
+ },
+
+ showXULChrome: function(aTag, aShow)
+ {
+ var XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+ var els = document.getElementsByTagNameNS(XULNS, aTag);
+
+ var i;
+ for (i = 0; i < els.length; ++i) {
+ // XXX don't interfere with previously collapsed toolbars
+ if (els[i].getAttribute("fullscreentoolbar") == "true" &&
+ !document.mozFullScreen) {
+ if (!aShow) {
+ var toolbarMode = els[i].getAttribute("mode");
+ if (toolbarMode != "text") {
+ els[i].setAttribute("saved-mode", toolbarMode);
+ els[i].setAttribute("saved-iconsize",
+ els[i].getAttribute("iconsize"));
+ els[i].setAttribute("mode", "icons");
+ els[i].setAttribute("iconsize", "small");
+ }
+
+ // XXX See bug 202978: we disable the context menu
+ // to prevent customization while in fullscreen, which
+ // causes menu breakage.
+ els[i].setAttribute("saved-context",
+ els[i].getAttribute("context"));
+ els[i].removeAttribute("context");
+
+ // Set the inFullscreen attribute to allow specific styling
+ // in fullscreen mode
+ els[i].setAttribute("inFullscreen", true);
+ }
+ else {
+ this.restoreAttribute(els[i], "mode");
+ this.restoreAttribute(els[i], "iconsize");
+ this.restoreAttribute(els[i], "context"); // XXX see above
+
+ els[i].removeAttribute("inFullscreen");
+ els[i].removeAttribute("moz-collapsed");
+ }
+ } else if (els[i].getAttribute("type") == "menubar") {
+ if (aShow) {
+ this.restoreAttribute(els[i], "autohide");
+ }
+ else {
+ els[i].setAttribute("saved-autohide",
+ els[i].getAttribute("autohide"));
+ els[i].setAttribute("autohide", "true");
+ }
+ } else {
+ // use moz-collapsed so it doesn't persist hidden/collapsed,
+ // so that new windows don't have missing toolbars
+ if (aShow)
+ els[i].removeAttribute("moz-collapsed");
+ else
+ els[i].setAttribute("moz-collapsed", "true");
+ }
+ }
+ },
+
+ restoreAttribute: function(element, attributeName)
+ {
+ var savedAttribute = "saved-" + attributeName;
+ if (element.hasAttribute(savedAttribute)) {
+ var savedValue = element.getAttribute(savedAttribute);
+ element.setAttribute(attributeName, savedValue);
+ element.removeAttribute(savedAttribute);
+ }
+ }
+
+};