home *** CD-ROM | disk | FTP | other *** search
- /* -*- 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 "msgcom.h"
-
- #include "cxabstra.h"
-
- #include "xp_thrmo.h"
- #include "libi18n.h" // International function
- #include "template.h"
- #include "mainfrm.h"
- #include "timer.h"
- #include "feselect.h"
- #ifdef MOZ_MAIL_NEWS
- #include "compfrm.h"
- #endif /* MOZ_MAIL_NEWS */
- #include "prefapi.h"
- #include "fmabstra.h"
-
- #ifdef DEBUG_WHITEBOX
- #include "qa.h"
- #define IS_MAIL_READER(pMWContext) (pMWContext->type == MWContextMail)
- #endif
-
- #define IS_MESSAGE_COMPOSE(pMWContext) (pMWContext->type == MWContextMessageComposition)
-
- /* implemented in fenet.cpp */
- void FE_DeleteDNSList(MWContext * currentContext);
-
- // All common front end functions.
- // Those needing specific optimizations, should do so here depending upon
- // the type of context.
- // As you will notice below, all functions call a virtual member of the abstract class.
- // These map to the appropriate class implementations at run time.
- // 05-01-95 created GAB
-
- void CFE_Alert(MWContext *pContext, const char *pMessage) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: Alert Blocking\n", pContext);
- return;
- }
- else if(pMessage) {
- char *pWinMessage = FE_Windowsify(pMessage);
- if(pWinMessage) {
- // If the context has ncapi data, have it pass off this information to
- // external applications first, and see if we pass it on from here.
- BOOL bWeAlert = TRUE;
- if(ABSTRACTCX(pContext)->m_pNcapiUrlData != NULL) {
- if(ABSTRACTCX(pContext)->m_pNcapiUrlData->Alert(pWinMessage) != 0) {
- bWeAlert = FALSE;
- }
- }
-
- if(bWeAlert == TRUE) {
- ABSTRACTCX(pContext)->Alert(pContext, pWinMessage);
- }
- XP_FREE(pWinMessage);
- }
- }
- }
-
- void CFE_AllConnectionsComplete(MWContext *pContext) {
-
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: AllConnectionsComplete Blocking\n", pContext);
- return;
- }
-
- #ifdef MOZ_MAIL_NEWS
- if (IS_MESSAGE_COMPOSE(pContext)) {
- MSG_Pane *pPane = MSG_FindPane( pContext, MSG_COMPOSITIONPANE );
- ASSERT( pPane );
- MSG_MailCompositionAllConnectionsComplete ( pPane );
- }
-
- if (NET_IsOffline()) {
- FE_Progress(pContext, szLoadString(IDS_STATUS_OFFLINE));
- } else
- #endif
- {
- // Set the progress to be complete.
- FE_Progress(pContext, szLoadString(IDS_DOC_DONE));
- }
-
- ABSTRACTCX(pContext)->AllConnectionsComplete(pContext);
- FE_DeleteDNSList(pContext);
-
- #ifdef EDITOR
- #ifdef XP_WIN16
- if( EDT_IS_EDITOR(pContext) ){
- // For some bizzare reason, we don't get proper focus
- // when starting an Edit frame+View in Win16
- // This fixes that
- ::SetFocus(PANECX(pContext)->GetPane());
- }
- #endif
- #endif
-
- #ifdef DEBUG_WHITEBOX
- // AfxMessageBox("cfe.cpp: Try Again?");
- if (IS_MAIL_READER(pContext)) {
- if (QATestCaseStarted == FALSE) {
- QADoDeleteMessageEventHandler();
- }
- }
- #endif
- }
-
- void CFE_UpdateStopState(MWContext *pContext) {
- TRACE("CFE_UpdateStopState(%p)\n", pContext);
-
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: UpdateStopState Blocking\n", pContext);
- return;
- }
- ABSTRACTCX(pContext)->UpdateStopState(pContext);
- #ifdef EDITOR
- #ifdef XP_WIN16
- if( EDT_IS_EDITOR(pContext) ){
- // For some bizzare reason, we don't get proper focus
- // when starting an Edit frame+View in Win16
- // This fixes that
- ::SetFocus(PANECX(pContext)->GetPane());
- }
- #endif
- #endif
- }
-
- void CFE_BeginPreSection(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: BeginPreSection Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->BeginPreSection(pContext);
- }
-
- void CFE_SetCallNetlibAllTheTime(MWContext *pContext)
- {
- XP_ASSERT(0); // depricated
- }
- void XP_SetCallNetlibAllTheTime(MWContext *pContext)
- {
- XP_ASSERT(0); // depricated
- }
-
- void CFE_ClearCallNetlibAllTheTime(MWContext *pContext)
- {
- XP_ASSERT(0); // depricated
- }
- void XP_ClearCallNetlibAllTheTime(MWContext *pContext)
- {
- XP_ASSERT(0); // depricated
- }
-
- void CFE_ClearView(MWContext *pContext, int iView) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: ClearView Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->ClearView(pContext, iView);
- }
-
- XP_Bool CFE_Confirm(MWContext *pContext, const char *pConfirmMessage) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: Confirm Blocking\n", pContext);
- return(FALSE);
- }
-
- char *pWinConfirmMessage = FE_Windowsify(pConfirmMessage);
-
- // If the context has ncapi data, have it pass off this information to
- // external applications first, and see if we pass it on from here.
- BOOL bWeConfirm = TRUE;
- XP_Bool bReturn;
- if(ABSTRACTCX(pContext)->m_pNcapiUrlData != NULL) {
- bReturn = ABSTRACTCX(pContext)->m_pNcapiUrlData->Confirm(pWinConfirmMessage);
- if(bReturn == TRUE || bReturn == FALSE) {
- bWeConfirm = FALSE;
- }
- }
-
- if(bWeConfirm == TRUE) {
- bReturn = ABSTRACTCX(pContext)->Confirm(pContext, pWinConfirmMessage);
- }
-
- XP_FREE(pWinConfirmMessage);
- return(bReturn);
- }
-
- MWContext *CFE_CreateNewDocWindow(MWContext *pContext, URL_Struct *pURL) {
- if(pContext != NULL) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- TRACE("Context %p Destroyed :: CreateNewDocWindow Blocking\n", pContext);
- // Don't allow this to happen if the context has been destroyed...
- return(NULL);
- }
-
- MWContext *pRetval = ABSTRACTCX(pContext)->CreateNewDocWindow(pContext, pURL);
- if(pRetval != NULL) {
- return(pRetval);
- }
- }
-
- // Regardless of the type of context we currently are, we are going to
- // create a new CMainFrame.
- // The contexts can do whatever they want in the derived class, but this is
- // the base implementation. If they return a context, then we won't do this.
-
- // Cause a frame to open.
- if(NULL == theApp.m_ViewTmplate->OpenDocumentFile(NULL)) {
- return(NULL);
- }
-
- // The new frame will be the last one in the application's frame list.
- CMainFrame *pFrame;
- CGenericFrame *pGenFrame;
- for(pGenFrame = theApp.m_pFrameList; pGenFrame->m_pNext; pGenFrame = pGenFrame->m_pNext) {
- /* No Body */;
- }
-
- pFrame = (CMainFrame *) pGenFrame;
- MWContext *pNewContext = pFrame->GetMainContext()->GetContext();
-
- // Appropriate assignment of options/prefs can only happen if we are also
- // owned by a CMainFrame, check.
- if(pContext != NULL) {
- if (ABSTRACTCX(pContext)->IsFrameContext() && pContext->type == MWContextBrowser) {
- // Assign over our options.
-
- // Toolbars...
- LPNSTOOLBAR pIToolBar = NULL;
- pFrame->GetChrome()->QueryInterface( IID_INSToolBar, (LPVOID *) &pIToolBar );
- if ( pIToolBar ) {
- pIToolBar->Release();
- }
-
- // Directory buttons and location box and Default Encoding.
- pFrame->GetChrome()->ShowToolbar(ID_LOCATION_TOOLBAR, pFrame->m_bLocationBar );
- pFrame->m_iCSID = INTL_DefaultDocCharSetID(pContext);
- }
-
- // Set the miscellaneous XP context properties.
-
- pNewContext->fancyFTP = pContext->fancyFTP;
- pNewContext->fancyNews = pContext->fancyNews;
-
- // Copy the session history over ONLY if called from a Browser
- if(pContext->type == MWContextBrowser && !EDT_IS_EDITOR(pContext)) {
- SHIST_CopySession(pNewContext, pContext);
- }
- }
-
- // If there was no URL specified to load, load what's in the history.
- // Only take URLs from a browser window.
- if(pURL == NULL) {
- // Make sure we're coming from a context we understand, otherwise get out now.
- if(pContext == NULL || EDT_IS_EDITOR(pContext) || pContext->type != MWContextBrowser) {
- // In this case, load the home page.
- pFrame->OnLoadHomePage();
- }
- else {
- // Load the oldest thing in it's history (most likely the home page).
- // This current entry was set above, all we have to do is go through
- // the motions of a reload.
- ABSTRACTCX(pNewContext)->Reload();
- }
- }
- else if(pURL != NULL) {
- // Load the URL passed into this function.
- ABSTRACTCX(pNewContext)->GetUrl(pURL, FO_CACHE_AND_PRESENT);
- }
-
- // New frame window up, and filled out appropriately.
- return(pNewContext);
- }
-
- #ifdef EDITOR
- MWContext *FE_CreateNewEditWindow(MWContext *pContext, URL_Struct *pURL) {
- if(pContext != NULL) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- TRACE("Context %p Destroyed :: CreateNewDocWindow Blocking\n", pContext);
- // Don't allow this to happen if the context has been destroyed...
- return(NULL);
- }
-
- MWContext *pRetval = ABSTRACTCX(pContext)->CreateNewDocWindow(pContext, pURL);
- if(pRetval != NULL) {
- return(pRetval);
- }
- }
-
- // Regardless of the type of context we currently are, we are going to
- // create a new CMainFrame.
- // The contexts can do whatever they want in the derived class, but this is
- // the base implementation. If they return a context, then we won't do this.
-
- // Cause a frame to open.
- if(NULL == theApp.m_EditTmplate->OpenDocumentFile(NULL)) {
- return(NULL);
- }
-
- // The new frame will be the last one in the application's frame list.
- CMainFrame *pFrame;
- CGenericFrame *pGenFrame;
- for(pGenFrame = theApp.m_pFrameList; pGenFrame->m_pNext; pGenFrame = pGenFrame->m_pNext) {
- /* No Body */;
- }
-
- pFrame = (CMainFrame *) pGenFrame;
- MWContext *pNewContext = pFrame->GetMainContext()->GetContext();
-
- // Appropriate assignment of options/prefs can only happen if we are also
- // owned by a CMainFrame, check.
- if(pContext != NULL && ABSTRACTCX(pContext)->IsFrameContext() &&
- pContext->type == MWContextBrowser){
- pFrame->m_iCSID = INTL_DefaultDocCharSetID(pContext);
- }
-
- // Set the miscellaneous XP context properties.
- if(pContext != NULL) {
- pNewContext->fancyFTP = pContext->fancyFTP;
- pNewContext->fancyNews = pContext->fancyNews;
-
- // Copy the session history over.
- SHIST_CopySession(pNewContext, pContext);
- }
-
- // If there was no URL specified to load, load what's in the history.
- // Only take URLs from a browser window.
- if(pURL == NULL) {
- // Load the oldest thing in it's history (most likely the home page).
- XP_List *pOldest = SHIST_GetList(pNewContext);
- History_entry *pEntry = (History_entry *)XP_ListNextObject(pOldest);
- if(pEntry == NULL) {
- // Nothing to load, we're done.
- return(pNewContext);
- }
-
- // don't load from non browser windows.
- if(pContext == NULL || pContext->type == MWContextBrowser || pContext->type == MWContextPane) {
- URL_Struct *pUrl = SHIST_CreateURLStructFromHistoryEntry(pContext ? pContext : pNewContext, pEntry);
- if(pUrl == NULL) {
- // Nothing to load? we're done.
- return(pNewContext);
- }
-
- // Set the current session history for the new context.
- SHIST_SetCurrent(&(pNewContext->hist), 0);
-
- // finally Load it.
- ABSTRACTCX(pNewContext)->GetUrl(pUrl, FO_CACHE_AND_EDIT);
- }
- }
- else if(pURL != NULL) {
- // Load the URL passed into this function.
- ABSTRACTCX(pNewContext)->GetUrl(pURL, FO_CACHE_AND_EDIT);
- }
-
- // New frame window up, and filled out appropriately.
- return(pNewContext);
- }
-
- #endif //EDITOR
-
- void CFE_DisplayBullet(MWContext *pContext, int iLocation, LO_BullettStruct *pBullet) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayBullet Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayBullet(pContext, iLocation, pBullet);
- }
-
- void CFE_DisplayEdge(MWContext *pContext, int iLocation, LO_EdgeStruct *pEdge) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayEdge Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayEdge(pContext, iLocation, pEdge);
- }
-
- void CFE_DisplayEmbed(MWContext *pContext, int iLocation, LO_EmbedStruct *pEmbed) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayEmbed Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayEmbed(pContext, iLocation, pEmbed);
- }
-
- void CFE_DisplayFormElement(MWContext *pContext, int iLocation, LO_FormElementStruct *pFormElement) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayFormElement Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayFormElement(pContext, iLocation, pFormElement);
- }
-
- void CFE_DisplayBorder(MWContext *pContext, int iLocation, int x, int y, int width, int height, int bw, LO_Color *color, LO_LineStyle style) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayBorder Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayBorder(pContext, iLocation, x, y, width, height, bw, color, style);
- }
-
- void CFE_DisplayFeedback(MWContext *pContext, int iLocation, LO_Element *pElement) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayFeedback Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayFeedback(pContext, iLocation, pElement);
- }
-
- void CFE_DisplayHR(MWContext *pContext, int iLocation, LO_HorizRuleStruct *pHorizRule) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- TRACE("Context %p Destroyed :: DisplayHR Blocking\n", pContext);
- // Don't allow this to happen if the context has been destroyed...
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayHR(pContext, iLocation, pHorizRule);
- }
- void CFE_DisplayJavaApp(MWContext *pContext, int iLocation, LO_JavaAppStruct *pJava) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- TRACE("Context %p Destroyed :: DisplayJavaApp Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayJavaApp(pContext, iLocation, pJava);
- }
-
- void CFE_DisplayLineFeed(MWContext *pContext, int iLocation, LO_LinefeedStruct *pLineFeed, XP_Bool iClear) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayLineFeed Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayLineFeed(pContext, iLocation, pLineFeed, iClear);
- }
-
- void CFE_DisplaySubDoc(MWContext *pContext, int iLocation, LO_SubDocStruct *pSubDoc) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplaySubDoc Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplaySubDoc(pContext, iLocation, pSubDoc);
- }
-
- void CFE_DisplayCell(MWContext *pContext, int iLocation, LO_CellStruct *pCell) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayCell Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayCell(pContext, iLocation, pCell);
- }
- void CFE_DisplaySubtext(MWContext *pContext, int iLocation, LO_TextStruct *pText, int32 lStartPos, int32 lEndPos, XP_Bool iClear) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplaySubtext Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplaySubtext(pContext, iLocation, pText, lStartPos, lEndPos, iClear);
- }
-
- void CFE_DisplayTable(MWContext *pContext, int iLocation, LO_TableStruct *pTable) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayTable Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayTable(pContext, iLocation, pTable);
- }
-
- void CFE_DisplayText(MWContext *pContext, int iLocation, LO_TextStruct *pText, XP_Bool iClear) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DisplayText Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DisplayText(pContext, iLocation, pText, iClear);
- }
-
- void CFE_EnableClicking(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: EnableClicking Blocking\n", pContext);
- return;
- }
-
- // Enable clicking now.
- if(pContext->waitingMode) {
- pContext->waitingMode = FALSE;
-
- ABSTRACTCX(pContext)->EnableClicking(pContext);
- }
- }
-
- void CFE_EndPreSection(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: EndPreSection Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->EndPreSection(pContext);
- }
-
- #ifdef LAYERS
- void CFE_EraseBackground(MWContext *pContext, int iLocation, int32 x, int32 y, uint32 width, uint32 height, LO_Color *pColor) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: EraseBackground Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->EraseBackground(pContext, iLocation, x, y, width, height, pColor);
- }
- void CFE_SetDrawable(MWContext *pContext, CL_Drawable *drawable)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetDrawable Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SetDrawable(pContext, drawable);
- }
- #endif
-
- /* java specific functions to allow delayed window creation and transparency */
- void CFE_HandleClippingView(MWContext *pContext, LJAppletData *appletD, int x, int y, int width, int height) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: HandleClippingView Blocking\n", pContext);
- return;
- }
-
- WINCX(pContext)->HandleClippingView(pContext, appletD, x, y, width, height);
- }
-
- void CFE_DrawJavaApp(MWContext *pContext, int iLocation, LO_JavaAppStruct *pJava) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DrawJavaApp Blocking\n", pContext);
- return;
- }
-
- WINCX(pContext)->DrawJavaApp(pContext, iLocation, pJava);
- }
-
- int CFE_FileSortMethod(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FileSortMethod Blocking\n", pContext);
- return(-1);
- }
-
- return(ABSTRACTCX(pContext)->FileSortMethod(pContext));
- }
-
- extern char *EDT_NEW_DOC_NAME;
-
- void CFE_FinishedLayout(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FinishedLayout Blocking\n", pContext);
- return;
- }
-
- // Let the image library no that the page is no longer loading.
- // IL_EndPage(pContext);
- ABSTRACTCX(pContext)->FinishedLayout(pContext);
-
- // See if the history title has been set yet.
- History_entry *pHist = SHIST_GetCurrent(&(pContext->hist));
-
- // Message compose window title is set by msglib. We don't want to overwrite
- // it here. - kamal
- if (pHist != NULL && pHist->title == NULL &&
- ( pContext->type == MWContextBrowser || pContext->type == MWContextEditor || pContext->type == MWContextPane) ) {
- // Make the URL the window title if there was none supplied.
- // unless its a new document -- leave that one blank
- if(pContext->title == NULL) {
- #ifdef EDITOR
- if ( EDT_IS_EDITOR( pContext ) &&
- _stricmp(pHist->address, EDT_NEW_DOC_NAME) != 0 ){
- // Let CWinCX::SetDocTitle() do name condensing for display,
- // so editor can detect cases where Title = Address
- FE_SetDocTitle(pContext, pHist->address);
- return;
- }
- #endif //EDITOR
- CString csTitle = pHist->address;
- WFE_CondenseURL(csTitle, 50, FALSE);
- FE_SetDocTitle(pContext, (char *)(const char *)csTitle);
- }
- }
- }
-
- void CFE_FormTextIsSubmit(MWContext *pContext, LO_FormElementStruct *pFormElement) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FormTextIsSubmit Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->FormTextIsSubmit(pContext, pFormElement);
- }
-
- void CFE_FreeEdgeElement(MWContext *pContext, LO_EdgeStruct *pEdge) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FreeEdgeElement Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->FreeEdgeElement(pContext, pEdge);
- }
-
- void
- CFE_CreateEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: CreateEmbedWindow Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->CreateEmbedWindow(pContext, pApp);
- }
-
- void
- CFE_SaveEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SaveEmbedWindow Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SaveEmbedWindow(pContext, pApp);
- }
-
- void
- CFE_RestoreEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: RestoreEmbedWindow Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->RestoreEmbedWindow(pContext, pApp);
- }
-
- void
- CFE_DestroyEmbedWindow(MWContext *pContext, NPEmbeddedApp *pApp) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: DestroyEmbedWindow Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->DestroyEmbedWindow(pContext, pApp);
- }
-
- void CFE_FreeEmbedElement(MWContext *pContext, LO_EmbedStruct *pEmbed) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FreeEmbedElement Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->FreeEmbedElement(pContext, pEmbed);
- }
-
- extern "C" void
- FE_FreeFormElement(MWContext *pContext, LO_FormElementData *pFormElement)
- {
- // Get our front end form element, and have it do it's thang.
- CFormElement *pFormClass = CFormElement::GetFormElement(NULL, pFormElement);
- if(pFormClass != NULL)
- pFormClass->FreeFormElement(pFormElement);
- }
-
- extern "C" void
- FE_ReleaseTextAttrFeData(MWContext * pContext, LO_TextAttr *attr)
- {
- if( attr )
- attr->FE_Data = NULL; // cached fonts are released through m_cplCachedFontList
- }
-
- void CFE_FreeJavaAppElement(MWContext *pContext, LJAppletData *appletD) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FreeJavaAppElement Blocking\n", pContext);
- return;
- }
-
- WINCX(pContext)->FreeJavaAppElement(pContext, appletD);
- }
-
- void CFE_HideJavaAppElement(MWContext *pContext, LJAppletData *pJava) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: HideJavaAppElement Blocking\n", pContext);
- return;
- }
-
- WINCX(pContext)->HideJavaAppElement(pContext, pJava);
- }
-
- void CFE_GetEmbedSize(MWContext *pContext, LO_EmbedStruct *pEmbed, NET_ReloadMethod bReload) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetEmbedSize Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetEmbedSize(pContext, pEmbed, bReload);
- }
-
- void CFE_GetFormElementInfo(MWContext *pContext, LO_FormElementStruct *pFormElement) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetFormElementInfo Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetFormElementInfo(pContext, pFormElement);
- }
-
- void CFE_GetFormElementValue(MWContext *pContext, LO_FormElementStruct *pFormElement, XP_Bool bHidden) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetFormElementValue Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetFormElementValue(pContext, pFormElement, bHidden);
- }
-
- void CFE_GetJavaAppSize(MWContext *pContext, LO_JavaAppStruct *pJava, NET_ReloadMethod bReload) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetJavaAppSize Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetJavaAppSize(pContext, pJava, bReload);
- }
-
- #ifdef LAYERS
- void CFE_GetTextFrame(MWContext *pContext, LO_TextStruct *pText,
- int32 start, int32 end, XP_Rect *frame) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetTextFrame Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetTextFrame(pContext, pText, start, end, frame);
- }
- #endif
-
- int CFE_GetTextInfo(MWContext *pContext, LO_TextStruct *pText, LO_TextInfo *pTextInfo) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetTextInfo Blocking\n", pContext);
- return(-1);
- }
-
- return(ABSTRACTCX(pContext)->GetTextInfo(pContext, pText, pTextInfo));
- }
-
- void CFE_GraphProgress(MWContext *pContext, URL_Struct *pURL, int32 lBytesReceived, int32 lBytesSinceLastTime, int32 lContentLength) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GraphProgress Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GraphProgress(pContext, pURL, lBytesReceived, lBytesSinceLastTime, lContentLength);
-
- time_t ttCurTime = theApp.GetTime();
- if(ABSTRACTCX(pContext)->ProgressReady(ttCurTime) == TRUE) {
- const char *pProgress = XP_ProgressText(lContentLength, lBytesReceived, 1, ABSTRACTCX(pContext)->GetElapsedSeconds(ttCurTime) + 1);
- if(pProgress != NULL) {
- FE_Progress(pContext, pProgress);
-
- // If the context has ncapi data, have it pass off this information to
- // external applications too.
- if(ABSTRACTCX(pContext)->m_pNcapiUrlData != NULL) {
- ABSTRACTCX(pContext)->m_pNcapiUrlData->MakingProgress(pProgress, CASTINT(lContentLength != 0 ? (lBytesReceived * 100 / lContentLength) % 100 : 0));
- }
- }
- }
- }
-
- void CFE_GraphProgressDestroy(MWContext *pContext, URL_Struct *pURL, int32 lContentLength, int32 lTotalBytesRead) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GraphProgressDestroy Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GraphProgressDestroy(pContext, pURL, lContentLength, lTotalBytesRead);
- }
-
- void CFE_GraphProgressInit(MWContext *pContext, URL_Struct *pURL, int32 lContentLength) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GraphProgressInit Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->ResetStopwatch();
- ABSTRACTCX(pContext)->GraphProgressInit(pContext, pURL, lContentLength);
-
- // If the context has ncapi data, have it pass off this information to
- // external applications too.
- // Get the data from the URL if available, then from the context....
- CNcapiUrlData *pNcapi = NULL;
- if(pURL != NULL) {
- pNcapi = NCAPIDATA(pURL);
- }
- if(pContext != NULL && pNcapi == NULL) {
- pNcapi = ABSTRACTCX(pContext)->m_pNcapiUrlData;
- }
- if(pNcapi != NULL) {
- pNcapi->InitializeProgress();
- }
- }
-
- void CFE_LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: LayoutNewDocument Blocking\n", pContext);
- return;
- }
-
- // Remove any previous document title.
- if(pContext->title != NULL) {
- XP_FREE(pContext->title);
- pContext->title = NULL;
- }
-
- // Remove the default status.
- if(pContext->defaultStatus != NULL) {
- XP_FREE(pContext->defaultStatus);
- pContext->defaultStatus = NULL;
- }
-
- // Reset state reported by image context.
- ABSTRACTCX(pContext)->SetImagesLoading(FALSE);
- ABSTRACTCX(pContext)->SetImagesLooping(FALSE);
- ABSTRACTCX(pContext)->SetImagesDelayed(FALSE);
-
- // Reset state reported by mocha image context.
- ABSTRACTCX(pContext)->SetMochaImagesLoading(FALSE);
- ABSTRACTCX(pContext)->SetMochaImagesLooping(FALSE);
- ABSTRACTCX(pContext)->SetMochaImagesDelayed(FALSE);
-
- // Add the document to the context session history.
- SHIST_AddDocument(pContext, SHIST_CreateHistoryEntry(pURL, NULL));
-
- ABSTRACTCX(pContext)->LayoutNewDocument(pContext, pURL, pWidth, pHeight, pmWidth, pmHeight);
-
- // Allow clicking now.
- FE_EnableClicking(pContext);
- }
-
- /* Only call this function from OnMouseMove(). This caches the last
- * message from anywhere but a mouse movement and displays the
- * last message sent whenever it is cleared from the mouse movement.
- */
-
- void wfe_Progress(MWContext *pContext, const char *pMessage) {
- if(pMessage == NULL || *pMessage == '\0') {
- if(pContext->defaultStatus) {
- FE_Progress(pContext, pContext->defaultStatus);
- }
- else {
- FE_Progress(pContext, ABSTRACTCX(pContext)->m_pLastStatus);
- }
- }
- else {
- ABSTRACTCX(pContext)->Progress(pContext,pMessage);
- }
- }
-
- void CFE_Progress(MWContext *pContext, const char *pMessage) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: Progress Blocking\n", pContext);
- return;
- }
-
- // Only allocate a last status if we're not simply passing in the
- // same last status.
- if (pMessage != ABSTRACTCX(pContext)->m_pLastStatus) {
- // Free off the old last status.
- if (ABSTRACTCX(pContext)->m_pLastStatus) {
- XP_FREE(ABSTRACTCX(pContext)->m_pLastStatus);
- }
-
- // Determine what the last status is depending on the message.
- if (pMessage && *pMessage) {
- // Make a copy of the message into last status.
- ABSTRACTCX(pContext)->m_pLastStatus = XP_STRDUP(pMessage);
- }
- else {
- // No last status.
- ABSTRACTCX(pContext)->m_pLastStatus = NULL;
- }
- }
-
- // We may be changing what we show if pMessage is NULL or has no context.
- if(pMessage == NULL || *pMessage == '\0') {
- // There is no message string (missing).
- // If the context has a default string we should show, do that instead.
- if(pContext->defaultStatus && *(pContext->defaultStatus)) {
- FE_Progress(pContext, pContext->defaultStatus);
- }
- else {
- // There was no message text and no default text so it looks like
- // someone wants the text cleared altogether.
- ABSTRACTCX(pContext)->Progress(pContext, " ");
- }
- }
- else {
- // Display the message if present.
- ABSTRACTCX(pContext)->Progress(pContext, pMessage);
- }
- }
-
- char *CFE_Prompt(MWContext *pContext, const char *pPrompt, const char *pDefault) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: Prompt Blocking\n", pContext);
- return(NULL);
- }
-
- char *pWinPrompt = FE_Windowsify(pPrompt);
- char *pWinDefault = FE_Windowsify(pDefault);
- char *pReturn = ABSTRACTCX(pContext)->Prompt(pContext, pWinPrompt, pWinDefault);
- XP_FREE(pWinPrompt);
- if (pWinDefault)
- XP_FREE(pWinDefault);
- return(pReturn);
- }
-
- char *CFE_PromptWithCaption(MWContext *pContext, const char *pCaption, const char *pPrompt, const char *pDefault) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: Prompt Blocking\n", pContext);
- return(NULL);
- }
-
- char *pWinPrompt = FE_Windowsify(pPrompt);
- char *pWinDefault = FE_Windowsify(pDefault);
- char *pWinCaption = FE_Windowsify(pCaption);
- char *pReturn = ABSTRACTCX(pContext)->PromptWithCaption(pContext, pWinCaption, pWinPrompt, pWinDefault);
- XP_FREE(pWinPrompt);
- if (pWinDefault)
- XP_FREE(pWinDefault);
- return(pReturn);
- }
-
- char *CFE_PromptPassword(MWContext *pContext, const char *pMessage) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: PromptPassword Blocking\n", pContext);
- return(NULL);
- }
-
- char *pWinMessage = FE_Windowsify(pMessage);
- char *pReturn = ABSTRACTCX(pContext)->PromptPassword(pContext, pWinMessage);
- XP_FREE(pWinMessage);
- return(pReturn);
- }
-
- XP_Bool CFE_PromptUsernameAndPassword(MWContext *pContext, const char *pMessage, char **ppUsername, char **ppPassword) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: PromptUsernameAndPassword Blocking\n", pContext);
- return(FALSE);
- }
-
- char *pWinMessage = FE_Windowsify(pMessage);
- XP_Bool bReturn = ABSTRACTCX(pContext)->PromptUsernameAndPassword(pContext, pWinMessage, ppUsername, ppPassword);
- XP_FREE(pWinMessage);
- return(bReturn);
- }
-
- void CFE_ResetFormElement(MWContext *pContext, LO_FormElementStruct *pFormElement) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: ResetFormElement Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->ResetFormElement(pContext, pFormElement);
- }
-
- void CFE_SetBackgroundColor(MWContext *pContext, uint8 cRed, uint8 cGreen, uint8 cBlue) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetBackgroundColor Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SetBackgroundColor(pContext, cRed, cGreen, cBlue);
- }
-
- void CFE_SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lLength) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetDocDimension Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SetDocDimension(pContext, iLocation, lWidth, lLength);
- }
-
- void CFE_SetDocPosition(MWContext *pContext, int iLocation, int32 lX, int32 lY) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetDocPosition Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SetDocPosition(pContext, iLocation, lX, lY);
- }
-
- void CFE_SetDocTitle(MWContext *pContext, char *pTitle) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetDocTitle Blocking\n", pContext);
- return;
- }
-
- // Default implementation allocs a string to put into the context.
- if(pContext->title != NULL) {
- XP_FREE(pContext->title);
- pContext->title = NULL;
- }
-
- if(pTitle != NULL) {
- pContext->title = XP_STRDUP(pTitle);
- }
-
- ABSTRACTCX(pContext)->SetDocTitle(pContext, pTitle);
-
- // Update the session history after calling context class, they may have
- // munged the title.
- SHIST_SetTitleOfCurrentDoc( pContext );
- }
-
- void CFE_SetFormElementToggle(MWContext *pContext, LO_FormElementStruct *pFormElement, XP_Bool bToggle) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetFormElementToggle Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SetFormElementToggle(pContext, pFormElement, bToggle);
- }
-
- void CFE_SetProgressBarPercent(MWContext *pContext, int32 lPercent) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: SetProgressBarPercent Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->SetProgressBarPercent(pContext, lPercent);
- }
-
- XP_Bool CFE_ShowAllNewsArticles(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: ShowAllNewsArticles Blocking\n", pContext);
- return(FALSE);
- }
-
- return(ABSTRACTCX(pContext)->ShowAllNewsArticles(pContext));
- }
-
- char *CFE_TranslateISOText(MWContext *pContext, int iCharset, char *pISOText)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- // Just return what's passed in.
- TRACE("Context %p Destroyed :: TranslateISOText Blocking\n", pContext);
- return(pISOText);
- }
-
- return(ABSTRACTCX(pContext)->TranslateISOText(pContext, iCharset, pISOText));
- }
-
- XP_Bool CFE_UseFancyFTP(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: UseFancyFTP Blocking\n", pContext);
- return(FALSE);
- }
-
- return(ABSTRACTCX(pContext)->UseFancyFTP(pContext));
- }
-
- XP_Bool CFE_UseFancyNewsgroupListing(MWContext *pContext) {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: UseFancyNewsgroupListing Blocking\n", pContext);
- return(FALSE);
- }
-
- return(ABSTRACTCX(pContext)->UseFancyNewsgroupListing(pContext));
- }
-
- // Get URL exit routines.
- void CFE_GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext) {
- // Enable clicking now.
- FE_EnableClicking(pContext);
-
- // Report any error.
- if(iStatus < 0 && pUrl->error_msg != NULL) {
- FE_Alert(pContext, pUrl->error_msg);
- }
-
- // Make sure the context is still valid. It's possible it's been deleted
- // out from under us while we were displaying the modal dialog box (and in
- // a sub-dispatch message loop)
- if (!XP_IsContextInList(pContext)) {
- return;
- }
-
- #ifdef EDITOR
- // Do stuff specific to the editor
- FE_EditorGetUrlExitRoutine(pUrl, iStatus, pContext);
-
- #ifdef MOZ_MAIL_NEWS
- if (IS_MESSAGE_COMPOSE(pContext))
- {
- CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
- if (pFrame)
- {
- CComposeFrame * pCompose = (CComposeFrame*)pFrame;
- if (pCompose->UseHtml() && !pCompose->Initialized())
- pCompose->GoldDoneLoading();
- }
- }
- #endif // MOZ_MAIL_NEWS
- #endif //EDITOR
-
- ABSTRACTCX(pContext)->GetUrlExitRoutine(pUrl, iStatus, pContext);
-
- if(iStatus != MK_CHANGING_CONTEXT) {
- // We autoproduce a title for those contexts which have none.
- // Message compose window title is set by msglib. We don't want to overwrite
- // it here. - kamal
- if(pContext->title == NULL && pUrl->address != NULL &&
- (pContext->type == MWContextBrowser || pContext->type == MWContextPane) && !EDT_IS_EDITOR(pContext) ) {
-
- // Limit the automatically set titles to 50 chars.
- CString csTitle = pUrl->address;
- WFE_CondenseURL(csTitle, 50, FALSE);
- FE_SetDocTitle(pContext, (char *)(const char *)csTitle);
- }
-
- // Since a page was loaded, go through all internal contexts and update their
- // anchors so that we can have an updated display on all relevant windows.
- XP_RefreshAnchors();
-
- // If the url has ncapi data, have it pass off this information to
- // external applications too (must happen before URL struct is
- // freed off (all connections complete).
- if(NCAPIDATA(pUrl) != NULL) {
- NCAPIDATA(pUrl)->EndProgress();
- }
-
- // Make sure the NCAPI Url data will let us free off the URL.
- if(NCAPIDATA(pUrl) == NULL || NCAPIDATA(pUrl)->CanFreeUrl() == TRUE) {
- FEU_DeleteUrlData(pUrl, NULL);
- NET_FreeURLStruct(pUrl);
- }
- }
- }
-
- // Get URL exit routines.
- void CFE_SimpleGetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext) {
- if(iStatus != MK_CHANGING_CONTEXT) {
- NET_FreeURLStruct(pUrl);
- }
- }
-
- void CFE_TextTranslationExitRoutine(PrintSetup *pTextFE) {
- // Enable clicking now.
- FE_EnableClicking(VOID2CX(pTextFE->carg, CAbstractCX)->GetContext());
-
- VOID2CX(pTextFE->carg, CAbstractCX)->TextTranslationExitRoutine(pTextFE);
-
- // Clean up what the CAbstractCX was responsible for allocating.
- XP_FREE(pTextFE->prefix);
- XP_FREE(pTextFE->filename);
- fclose(pTextFE->out);
-
- // Don't remove the print setup.
- // It is freed elsewhere by other
- // code (TextFE stuff).
- }
-
- void CFE_GetDocPosition(MWContext * pContext, int iLoc, int32 * pX, int32 * pY)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: GetDocPosition Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetDocPosition(pContext, iLoc, pX, pY);
- }
-
- #ifdef LAYERS
- PRBool FE_HandleLayerEvent(MWContext * pContext, CL_Layer * pLayer,
- CL_Event * pEvent)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: HandleLayerEvent Blocking\n", pContext);
- return PR_FALSE;
- }
-
- return (PRBool)ABSTRACTCX(pContext)->HandleLayerEvent(pLayer, pEvent);
- }
-
- PRBool FE_HandleEmbedEvent(MWContext * pContext, LO_EmbedStruct *embed,
- CL_Event * pEvent)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: HandleEmbedEvent Blocking\n", pContext);
- return PR_FALSE;
- }
-
- return (PRBool)ABSTRACTCX(pContext)->HandleEmbedEvent(embed, pEvent);
- }
- #endif
- //
- // Scroll the document so the given X, Y coordinate is in view. Actually
- // call the scrolling routines here so that we are sure that the form elements
- // get moved too.
- //
- extern "C" void
- FE_ScrollDocTo(MWContext * pContext, int iLoc, int32 X, int32 Y)
- {
- // Map this directly to SetDocPosition.
- FE_SetDocPosition(pContext, iLoc, X<0?0:X, Y<0?0:Y);
- }
-
- //
- // Scroll the document so the given X, Y coordinate is in view. Actually
- // call the scrolling routines here so that we are sure that the form elements
- // get moved too.
- //
- extern "C" void
- FE_ScrollDocBy(MWContext * pContext, int iLoc, int32 X, int32 Y)
- {
- int32 pX, pY;
-
- FE_GetDocPosition(pContext, iLoc, &pX, &pY);
- pX +=X;
- pY +=Y;
-
- FE_SetDocPosition(pContext, iLoc, pX<0?0:pX, pY<0?0:pY);
- }
-
- extern "C" void
- FE_BackCommand(MWContext *pContext)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: BackCommand Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->AllBack();
- }
-
- extern "C" void
- FE_ForwardCommand(MWContext *pContext)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: ForwardCommand Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->AllForward();
- }
-
- extern "C" void
- FE_HomeCommand (MWContext *pContext)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: HomeCommand Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GoHome();
- }
-
- extern "C" void
- FE_PrintCommand(MWContext *pContext)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: PrintCommand Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->PrintContext();
- }
-
- XP_Bool
- FE_FindCommand(MWContext *pContext, char* szName, XP_Bool bCaseSensitive, XP_Bool bBackwards,
- XP_Bool bWrap)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: FindCommand Blocking\n", pContext);
- return FALSE;
- }
-
- if (szName)
- return ABSTRACTCX(pContext)->DoFind(NULL, (const char *)szName, bCaseSensitive,
- !bBackwards, FALSE);
- else
- ABSTRACTCX(pContext)->AllFind(pContext);
- return FALSE;
-
- }
-
- extern "C" void
- FE_GetWindowOffset(MWContext *pContext, int32 *sx, int32 *sy)
- {
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: WindowToScreenXY Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->GetWindowOffset(sx, sy);
- }
-
- extern "C" void FE_Alert(MWContext *pContext, const char *pMsg)
- {
- if(pContext != NULL) {
-
- // we NEVER want biff to put up an alert
- if (pContext->type == MWContextBiff)
- return;
- if (IS_MESSAGE_COMPOSE(pContext)) {
- CGenericFrame * pFrame = wfe_FrameFromXPContext(pContext);
- pFrame->GetChrome()->StopAnimation();
- }
- pContext->funcs->Alert(pContext, pMsg);
- } else {
- MessageBox(NULL, pMsg, "Netscape", MB_OK);
- }
- }
-
- extern "C" int32 FE_GetContextID(MWContext *pContext)
- {
- CAbstractCX *pCX = ABSTRACTCX(pContext);
-
- if(pCX != NULL) {
- return((int32)pCX->GetContextID());
- }
- else {
- return(XP_DOCID(pContext));
- }
- }
-
- extern "C" void FE_UrlChangedContext(URL_Struct *pUrl, MWContext *pOldContext, MWContext *pNewContext) {
- // A Url has changed context.
- // We need to mark it in the new context if it has ncapi_data (which we use
- // to track such things under windows).
- if(pUrl->ncapi_data != NULL) {
- // Tell it about the change.
- CNcapiUrlData *pUrlData = (CNcapiUrlData *)pUrl->ncapi_data;
- pUrlData->ChangeContext(ABSTRACTCX(pNewContext));
- }
- }
-
- extern "C" void FE_UpdateStopState(MWContext *pContext) {
-
- if(ABSTRACTCX(pContext)->IsDestroyed()) {
- // Don't allow this to happen if the context has been destroyed...
- TRACE("Context %p Destroyed :: UpdateStopState Blocking\n", pContext);
- return;
- }
-
- ABSTRACTCX(pContext)->UpdateStopState(pContext);
- }
-
- // Called by the security library to indicate that the user has choosen
- // when-to-ask-for-password preferences
- //
- // XXX - jsw - remove me
- void FE_SetPasswordAskPrefs(MWContext *context, int askPW, int timeout)
- {
- }
-
- static char fixFont[12] = "Courier New";
- static char propFont[6] = "Arial";
- extern "C" XP_Bool FE_CheckFormTextAttributes(MWContext *context,
- LO_TextAttr *oldAttr, LO_TextAttr *newAttr, int32 type)
- {
- if (oldAttr && newAttr && !oldAttr->font_face) {
- memcpy(newAttr,oldAttr, sizeof(LO_TextAttr));
- // setup the text attribute here.
-
- CDCCX *pDCCX = CXDC(context);
- int csid = INTL_DefaultWinCharSetID(context);
-
- if (oldAttr->fontmask & LO_FONT_FIXED) {
- if (csid == CS_LATIN1) {
- newAttr->font_face = fixFont;
- }
- else {
- newAttr->font_face = (char*)IntlGetUIFixFaceName(csid);
- }
- }
- else {
- if (csid == CS_LATIN1) {
- // this is a hack, so default Arial font for form element will not look so
- // big.
- if (newAttr->size > 1);
- newAttr->size -=1;
- newAttr->font_face = propFont;
- }
- else {
- newAttr->font_face = (char*)IntlGetUIPropFaceName(csid);
- }
-
- }
- newAttr->font_weight = FW_NORMAL; /* 100, 200, ... 900 */
- newAttr->FE_Data = NULL; /* For the front end to store font IDs */
- return TRUE;
- }
- else
- return FALSE;
-
- }
-
- extern "C" XP_Bool FE_IsNetcasterInstalled(void) {
- return FEU_IsNetcasterAvailable();
- }
-
- extern "C" void FE_RunNetcaster(MWContext *context) {
- FEU_OpenNetcaster();
- }
-
- extern "C" MWContext *FE_IsNetcasterRunning(void) {
- return theApp.m_pNetcasterWindow;
- }
-