DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (5216dd412535)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Mozilla Communicator client code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Bill Law    <law@netscape.com>
 *   Blake Ross  <blake@netscape.com>
 *   Benjamin Smedberg <bsmedberg@covad.net>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */
 
#include "nsISupports.idl"

/* nsINativeAppSupport
 *
 * This "pseudo" (in the XPCOM sense) interface provides for
 * platform-specific general application support:
 *  o It manages the details of the simple DDE communication 
 *    supported on the Win32 platform (it is the addition of this 
 *    item that prompted the creation of this interface.
 *
 * Due to the nature of the beast, this interface is not a full-blown
 * XPCOM component.  The primary reason is that objects that implement
 * this interface generally must be operational *before* XPCOM (or any
 * of the rest of Mozilla) are initialized.  As a result, this 
 * interface is instantiated by somewhat unconventional means.
 *
 * To create the implementor of this interface, you call the function
 * NS_CreateNativeAppSupport.  This is done in the startup code
 * in nsAppRunner.cpp
 *
 * The interface provides these functions:
 *  start - You call this to inform the native app support that the  
 *          application is starting.  In addition, it serves as a
 *          query as to whether the application should continue to
 *          run.
 *
 *          If the returned boolean result is PR_FALSE, then the
 *          application should exit without further processing.  In
 *          such cases, the returned nsresult indicates whether the
 *          reason to exit is due to an error or not.
 *
 *          Win32 Note: In the case of starting a second instance
 *                      of this executable, this function will return
 *                      PR_FALSE and nsresult==NS_OK.  This means that
 *                      the command line arguments have been
 *                      successfully passed to the instance of the
 *                      application acting as a DDE server.
 *
 *  stop - You call this to inform the native app support that the
 *         application *wishes* to terminate.  If the returned boolean
 *         value is PR_FALSE, then the application should continue
 *         (as if there were still additional top-level windows open).
 *         
 *         Win32 Note: If this is the instance of the application
 *                     acting as the DDE server, and there are current
 *                     DDE conversations active with other instances
 *                     acting as DDE clients, then this function will
 *                     return PR_FALSE.
 * 
 *  quit - Like Stop, but this method *forces* termination (or more 
 *         precisely, indicates that the application is about to be
 *         terminated regardless of what a call to Stop might have
 *         returned.
 *
 *         This method is intended to be called when the user selects
 *         the "Quit" option (close all windows and exit).
 *
 *         Win32 Note: Stop is problematic in the case of "Quit" (close
 *                     all windows and exit the application) because
 *                     either we don't Quit or (potentially) we lose
 *                     requests coming from other instances of the
 *                     application.  The strategy is to give preference
 *                     to the user's explicit Quit request.  In the
 *                     unlikely event that a request is pending from
 *                     another instance of the application, then such
 *                     requests are essentially ignored.  This is
 *                     roughly equivalent to handling that request by
 *                     opening a new window, followed by immediately
 *                     closing it.  Since this is the same as if the
 *                     request came in immediately before the Quit
 *                     call (versus immediately after it), no harm.
 *
 *                     There is an exposure here: Upon return from this
 *                     function, any DDE connect request (for Mozilla)
 *                     will fail and other instances of the application
 *                     will start up as a DDE server.  In that case,
 *                     those instances may do things that conflict with
 *                     the subsequent shutting down of the instance that
 *                     is quitting.  For this reason, the call to Quit
 *                     should be deferred as long as possible.
 *
 *  onLastWindowClosing -  Called when the last window is closed. Used as a
 *                         "soft" shutdown, passwords are flushed.
 */

interface nsIXULWindow;
interface nsICmdLineService;

[scriptable, uuid(5fdf8480-1f98-11d4-8077-00600811a9c3)]
interface nsINativeAppSupport : nsISupports {
    // Startup/shutdown.
    boolean start();
    void    enable();
    boolean stop();
    void    quit();

    void onLastWindowClosing();
    void ReOpen();
};