diff options
Diffstat (limited to 'toolkit/content/globalOverlay.js')
-rw-r--r-- | toolkit/content/globalOverlay.js | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/toolkit/content/globalOverlay.js b/toolkit/content/globalOverlay.js new file mode 100644 index 000000000..1df3d65fc --- /dev/null +++ b/toolkit/content/globalOverlay.js @@ -0,0 +1,168 @@ +/* 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) +{ + let { AppConstants } = Components.utils.import("resource://gre/modules/AppConstants.jsm"); + + // Closing the last window doesn't quit the application on OS X. + if (AppConstants.platform != "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; + if (windowCount != 1 && typeof(aPromptFunction) == "function" && !aPromptFunction()) + return false; + } else if (typeof(aPromptFunction) == "function" && !aPromptFunction()) { + return false; + } + + if (aClose) { + window.close(); + return window.closed; + } + + 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 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; +}); |