/toolkit/content/globalOverlay.js
http://github.com/zpao/v8monkey · JavaScript · 193 lines · 155 code · 27 blank · 11 comment · 37 complexity · 2d334fda01772f110d21d90f76b07710 MD5 · raw file
- 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 (++windowCount == 2)
- break;
- }
- var inPrivateBrowsing = false;
- try {
- var pbSvc = Components.classes["@mozilla.org/privatebrowsing;1"]
- .getService(Components.interfaces.nsIPrivateBrowsingService);
- inPrivateBrowsing = pbSvc.privateBrowsingEnabled;
- } catch(e) {
- // safe to ignore
- }
- // 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 || inPrivateBrowsing)
- #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);
- }
- __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;
- });