/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */
#include "stdafx.h"

#include "dialog.h"

/*----------------------------------------------------------------------**
** Hack alert.                                                          **
** The following code is needed so that backend libraries can perform   **
** a small set of operations before we are initialized.                 **
** In specific, the fortezza security lib may call FE_PromptPassword    **
** via the context function table before we ever have finished creating **
** a window.                                                            **
**----------------------------------------------------------------------*/

char *sux_PromptPassword(MWContext *pContext, const char *pMessage)	{
    char *pRetval = NULL;
    
    char *pWinMessage = FE_Windowsify(pMessage);
    if(pWinMessage)  {
        CWnd desktop;
        desktop.Attach(::GetDesktopWindow());
        CDialogPASS dlgPass(&desktop);
        theApp.m_splash.SafeHide();
        
        pRetval = dlgPass.DoModal(pWinMessage);
        
        XP_FREE(pWinMessage);
        pWinMessage = NULL;
        desktop.Detach();
    }
    
    return(pRetval);
}

MWContext *FE_GetInitContext(void)  {
    static MWContext *pCX = NULL;
    static _ContextFuncs sFux;
    static MWContext sCX;
    
    //  First time through, init context.
    //  Note, it should only set up the information
    //      needed to get the back end libraries by.
    //  It should not be added to the global context
    //      list or be routed through any of the CAbstractCX
    //      derived classes.  ETC.
    if(pCX == NULL) {
        memset(&sCX, 0, sizeof(sCX));
        memset(&sFux, 0, sizeof(sFux));

        //  Set up required functions.
        sFux.PromptPassword = sux_PromptPassword;
        
        //  Fill in the context.
        sCX.funcs = &sFux;
        pCX = &sCX;
    }
    
    return(pCX);
}

