diff options
Diffstat (limited to 'comm/suite/browser/fullScreen.js')
-rw-r--r-- | comm/suite/browser/fullScreen.js | 107 |
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); + } + } + +}; |