diff -r 000000000000 -r 6474c204b198 toolkit/content/globalOverlay.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolkit/content/globalOverlay.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,191 @@ +/* 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/. */ + +function closeWindow(aClose, aPromptFunction) +{ +# Closing the last window doesn't quit the application on OS X. +#ifndef XP_MACOSX + var windowCount = 0; + var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator); + var e = wm.getEnumerator(null); + + while (e.hasMoreElements()) { + var w = e.getNext(); + if (w.closed) { + continue; + } + if (++windowCount == 2) + break; + } + + // If we're down to the last window and someone tries to shut down, check to make sure we can! + if (windowCount == 1 && !canQuitApplication("lastwindow")) + return false; + else if (windowCount != 1) +#endif + if (typeof(aPromptFunction) == "function" && !aPromptFunction()) + return false; + + if (aClose) + window.close(); + + return true; +} + +function canQuitApplication(aData) +{ + var os = Components.classes["@mozilla.org/observer-service;1"] + .getService(Components.interfaces.nsIObserverService); + if (!os) return true; + + try { + var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"] + .createInstance(Components.interfaces.nsISupportsPRBool); + os.notifyObservers(cancelQuit, "quit-application-requested", aData || null); + + // Something aborted the quit process. + if (cancelQuit.data) + return false; + } + catch (ex) { } + return true; +} + +function goQuitApplication() +{ + if (!canQuitApplication()) + return false; + + var appStartup = Components.classes['@mozilla.org/toolkit/app-startup;1']. + getService(Components.interfaces.nsIAppStartup); + + appStartup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit); + return true; +} + +// +// Command Updater functions +// +function goUpdateCommand(aCommand) +{ + try { + var controller = top.document.commandDispatcher + .getControllerForCommand(aCommand); + + var enabled = false; + if (controller) + enabled = controller.isCommandEnabled(aCommand); + + goSetCommandEnabled(aCommand, enabled); + } + catch (e) { + Components.utils.reportError("An error occurred updating the " + + aCommand + " command: " + e); + } +} + +function goDoCommand(aCommand) +{ + try { + var controller = top.document.commandDispatcher + .getControllerForCommand(aCommand); + if (controller && controller.isCommandEnabled(aCommand)) + controller.doCommand(aCommand); + } + catch (e) { + Components.utils.reportError("An error occurred executing the " + + aCommand + " command: " + e); + } +} + + +function goSetCommandEnabled(aID, aEnabled) +{ + var node = document.getElementById(aID); + + if (node) { + if (aEnabled) + node.removeAttribute("disabled"); + else + node.setAttribute("disabled", "true"); + } +} + +function goSetMenuValue(aCommand, aLabelAttribute) +{ + var commandNode = top.document.getElementById(aCommand); + if (commandNode) { + var label = commandNode.getAttribute(aLabelAttribute); + if (label) + commandNode.setAttribute("label", label); + } +} + +function goSetAccessKey(aCommand, aValueAttribute) +{ + var commandNode = top.document.getElementById(aCommand); + if (commandNode) { + var value = commandNode.getAttribute(aValueAttribute); + if (value) + commandNode.setAttribute("accesskey", value); + } +} + +// this function is used to inform all the controllers attached to a node that an event has occurred +// (e.g. the tree controllers need to be informed of blur events so that they can change some of the +// menu items back to their default values) +function goOnEvent(aNode, aEvent) +{ + var numControllers = aNode.controllers.getControllerCount(); + var controller; + + for (var controllerIndex = 0; controllerIndex < numControllers; controllerIndex++) { + controller = aNode.controllers.getControllerAt(controllerIndex); + if (controller) + controller.onEvent(aEvent); + } +} + +function visitLink(aEvent) { + var node = aEvent.target; + while (node.nodeType != Node.ELEMENT_NODE) + node = node.parentNode; + var url = node.getAttribute("link"); + if (!url) + return; + + var protocolSvc = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"] + .getService(Components.interfaces.nsIExternalProtocolService); + var ioService = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + var uri = ioService.newURI(url, null, null); + + // if the scheme is not an exposed protocol, then opening this link + // should be deferred to the system's external protocol handler + if (protocolSvc.isExposedProtocol(uri.scheme)) { + var win = window.top; + if (win instanceof Components.interfaces.nsIDOMChromeWindow) { + while (win.opener && !win.opener.closed) + win = win.opener; + } + win.open(uri.spec); + } + else + protocolSvc.loadUrl(uri); +} + +function setTooltipText(aID, aTooltipText) +{ + var element = document.getElementById(aID); + if (element) + element.setAttribute("tooltiptext", aTooltipText); +} + +this.__defineGetter__("NS_ASSERT", function() { + delete this.NS_ASSERT; + var tmpScope = {}; + Components.utils.import("resource://gre/modules/debug.js", tmpScope); + return this.NS_ASSERT = tmpScope.NS_ASSERT; +});