Nova to Normandy merge. Approved by blythe.
git-svn-id: svn://10.0.0.236/branches/NORMANDY_BRANCH@1806 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -50,15 +50,16 @@
|
||||
#include "mnprefs.h"
|
||||
#include "mailmisc.h"
|
||||
#include "wfemsg.h"
|
||||
#endif /* MOZ_MAIL_NEWS */
|
||||
#include "dlgseldg.h"
|
||||
#ifdef MOZ_MAIL_NEWS
|
||||
#include "addrbook.h"
|
||||
#include "addrfrm.h" // for creating vcards
|
||||
#ifdef FEATURE_ADDRPROP
|
||||
#include "addrprop.h"
|
||||
#endif
|
||||
#endif /* MOZ_MAIL_NEWS */
|
||||
#ifdef MOZ_OFFLINE
|
||||
#include "offpkdlg.h"
|
||||
#endif // MOZ_OFFLINE
|
||||
|
||||
|
||||
extern "C" {
|
||||
#include "xpgetstr.h"
|
||||
@@ -82,6 +83,8 @@ extern "C" void GetFolderServerNames
|
||||
(char* lpName, int nDefaultID, CString& folder, CString& server);
|
||||
extern "C" MSG_Host *DoAddNewsServer(CWnd* pParent, int nFromWhere);
|
||||
|
||||
extern "C" char *FE_GetProgramDirectory(char *buffer, int length);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Helper functions
|
||||
|
||||
@@ -852,7 +855,7 @@ CAppearancePrefs::GetCurrentCharset(LPDWORD pdwCharsetNum)
|
||||
|
||||
class CMailNewsPreferences : public IMailNewsInterface {
|
||||
public:
|
||||
CMailNewsPreferences();
|
||||
CMailNewsPreferences(MWContext *pContext);
|
||||
~CMailNewsPreferences();
|
||||
|
||||
// IUnknown methods
|
||||
@@ -872,18 +875,20 @@ class CMailNewsPreferences : public IMailNewsInterface {
|
||||
STDMETHODIMP GetFolderServer(LPOLESTR lpFolderPath, DWORD dwType,
|
||||
LPOLESTR *lpFolder, LPOLESTR *lpServer);
|
||||
|
||||
STDMETHODIMP FillNewsServerList(HWND hControl, LPOLESTR lpServerName);
|
||||
STDMETHODIMP GetNewsServerName(HWND hControl, LPOLESTR *lpServerName);
|
||||
STDMETHODIMP FillNewsServerList(HWND hControl, LPOLESTR lpServerName, LPVOID FAR* ppServer);
|
||||
STDMETHODIMP_(BOOL) AddNewsServer(HWND hParent, HWND hControl);
|
||||
STDMETHODIMP_(BOOL) EditNewsServer(HWND hParent, HWND hControl, BOOL *pChanged);
|
||||
STDMETHODIMP DeleteNewsServer(HWND hParent, HWND hControl);
|
||||
STDMETHODIMP DeleteNewsServer(HWND hParent, HWND hControl, LPVOID FAR* lpDefault);
|
||||
|
||||
STDMETHODIMP_(BOOL) AddMailServer(HWND hParent, HWND hControl, BOOL bAllowBoth, DWORD dwType);
|
||||
STDMETHODIMP_(BOOL) EditMailServer(HWND hParent, HWND hControl, BOOL bAllowBoth, DWORD dwType);
|
||||
STDMETHODIMP_(BOOL) DeleteMailServer(HWND hParent, HWND hControl, DWORD dwType);
|
||||
STDMETHODIMP SetImapDefaultServer(HWND hControl);
|
||||
|
||||
STDMETHODIMP FillLdapDirList(HWND hControl, LPOLESTR lpServerName);
|
||||
STDMETHODIMP SetLdapDirAutoComplete(HWND hControl, BOOL bOnOrOff);
|
||||
STDMETHODIMP SaveLdapDirAutoComplete();
|
||||
|
||||
|
||||
// Initialization routine to create contained and aggregated objects
|
||||
HRESULT Init();
|
||||
@@ -900,12 +905,13 @@ class CMailNewsPreferences : public IMailNewsInterface {
|
||||
HFONT m_hFont, m_hBoldFont;
|
||||
XP_List *m_pLdapServers;
|
||||
MSG_NewsHost** m_hNewsHost;
|
||||
MWContext *m_pContext;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMailNewsPreferences
|
||||
|
||||
CMailNewsPreferences::CMailNewsPreferences()
|
||||
CMailNewsPreferences::CMailNewsPreferences(MWContext *pContext)
|
||||
{
|
||||
m_uRef = 0;
|
||||
m_pCategory = NULL;
|
||||
@@ -915,13 +921,9 @@ CMailNewsPreferences::CMailNewsPreferences()
|
||||
m_hBoldFont = NULL;
|
||||
m_pLdapServers = NULL;
|
||||
m_hNewsHost = NULL;
|
||||
m_pContext = pContext;
|
||||
|
||||
char location[256];
|
||||
int nLen = 255;
|
||||
|
||||
m_pLdapServers = XP_ListNew();
|
||||
PREF_GetDefaultCharPref("browser.addressbook_location", location, &nLen);
|
||||
DIR_GetServerPreferences (&m_pLdapServers, location);
|
||||
m_pLdapServers = theApp.m_directories;
|
||||
}
|
||||
|
||||
CMailNewsPreferences::~CMailNewsPreferences()
|
||||
@@ -935,7 +937,6 @@ CMailNewsPreferences::~CMailNewsPreferences()
|
||||
theApp.ReleaseAppFont(m_hBoldFont);
|
||||
if (m_pLdapServers)
|
||||
{
|
||||
DIR_DeleteServerList(m_pLdapServers);
|
||||
m_pLdapServers = NULL;
|
||||
}
|
||||
if (m_hNewsHost)
|
||||
@@ -1028,11 +1029,21 @@ CMailNewsPreferences::CreateAddressBookCard(HWND hParent)
|
||||
formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), name);
|
||||
else
|
||||
formattedString = XP_GetString (MK_ADDR_NEW_CARD);
|
||||
#ifndef MOZ_NEWADDR
|
||||
CAddrEditProperties prop(NULL, pab,
|
||||
(const char *) formattedString, &parent, 0, &person);
|
||||
prop.SetCurrentPage(0);
|
||||
if (prop.DoModal() == IDCANCEL)
|
||||
result = FALSE;
|
||||
#else
|
||||
MSG_Pane *pPane = NULL;
|
||||
AB_GetIdentityPropertySheet(m_pContext, WFE_MSGGetMaster(),
|
||||
&pPane);
|
||||
CAddrEditProperties prop(NULL, (const char *) formattedString,
|
||||
&parent, pPane, m_pContext, TRUE);
|
||||
if(prop.DoModal() == IDCANCEL)
|
||||
result = FALSE;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1078,19 +1089,38 @@ CMailNewsPreferences::EditAddressBookCard(HWND hParent)
|
||||
char fullname [kMaxFullNameLength];
|
||||
AB_GetFullName(pab, theApp.m_pABook, entryID, fullname);
|
||||
formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), fullname);
|
||||
#ifndef MOZ_NEWADDR
|
||||
CAddrEditProperties prop(NULL, pab,
|
||||
(const char *) formattedString, &parent, entryID);
|
||||
prop.SetCurrentPage(0);
|
||||
prop.DoModal();
|
||||
#else
|
||||
MSG_Pane *pPane = NULL;
|
||||
AB_GetIdentityPropertySheet(m_pContext, WFE_MSGGetMaster(),
|
||||
&pPane);
|
||||
CAddrEditProperties prop(NULL, (const char *) formattedString,
|
||||
&parent, pPane, m_pContext);
|
||||
prop.DoModal();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
CString formattedString;
|
||||
formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), name);
|
||||
#ifndef MOZ_NEWADDR
|
||||
CAddrEditProperties prop(NULL, pab,
|
||||
(const char *) formattedString, &parent, 0, &person);
|
||||
prop.SetCurrentPage(0);
|
||||
prop.DoModal();
|
||||
#else
|
||||
MSG_Pane *pPane = NULL;
|
||||
AB_GetIdentityPropertySheet(m_pContext, WFE_MSGGetMaster(),
|
||||
&pPane);
|
||||
CAddrEditProperties prop(NULL, (const char *) formattedString,
|
||||
&parent, pPane, m_pContext);
|
||||
prop.DoModal();
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1155,16 +1185,9 @@ STDMETHODIMP CMailNewsPreferences::ShowChooseFolder
|
||||
LPOLESTR *lpServer, LPOLESTR *lpPref)
|
||||
{
|
||||
char* lpPath = (char*)lpFolderPath;
|
||||
int nDefaultID;
|
||||
if (dwType == TYPE_SENT)
|
||||
nDefaultID = MK_MSG_SENT_L10N_NAME;
|
||||
else if (dwType == TYPE_DRAFT)
|
||||
nDefaultID = MK_MSG_DRAFTS_L10N_NAME;
|
||||
else if (dwType == TYPE_TEMPLATE)
|
||||
nDefaultID = MK_MSG_TEMPLATES_L10N_NAME;
|
||||
CWnd parent;
|
||||
parent.Attach(hParent);
|
||||
CChooseFolderDialog folderDialog(&parent, lpPath, nDefaultID);
|
||||
CChooseFolderDialog folderDialog(&parent, lpPath, (int)dwType);
|
||||
if (IDOK == folderDialog.DoModal())
|
||||
{
|
||||
*lpFolder = AllocTaskOleString(LPCTSTR(folderDialog.m_szFolder));
|
||||
@@ -1183,7 +1206,7 @@ STDMETHODIMP CMailNewsPreferences::GetFolderServer
|
||||
|
||||
char* lpPath = (char*)lpFolderPath;
|
||||
int nDefaultID;
|
||||
if (dwType == TYPE_SENT)
|
||||
if (dwType == TYPE_SENTMAIL || dwType == TYPE_SENTNEWS)
|
||||
nDefaultID = MK_MSG_SENT_L10N_NAME;
|
||||
else if (dwType == TYPE_DRAFT)
|
||||
nDefaultID = MK_MSG_DRAFTS_L10N_NAME;
|
||||
@@ -1203,7 +1226,8 @@ STDMETHODIMP CMailNewsPreferences::GetFolderServer
|
||||
return NOERROR;
|
||||
}
|
||||
|
||||
STDMETHODIMP CMailNewsPreferences::FillNewsServerList(HWND hControl, LPOLESTR lpServerName)
|
||||
STDMETHODIMP CMailNewsPreferences::FillNewsServerList
|
||||
(HWND hControl, LPOLESTR lpServerName, LPVOID FAR* ppServer)
|
||||
{
|
||||
int nDefaultHost = 0;
|
||||
int nSelectedIndex = -1;
|
||||
@@ -1225,7 +1249,10 @@ STDMETHODIMP CMailNewsPreferences::FillNewsServerList(HWND hControl, LPOLESTR lp
|
||||
(LPARAM)(DWORD)m_hNewsHost[i]);
|
||||
const char *pName = MSG_GetNewsHostUIName(m_hNewsHost[i]);
|
||||
if (!XP_FILENAMECMP(lpPrefName, pName))
|
||||
{
|
||||
nSelectedIndex = nAddedIndex;
|
||||
*ppServer = m_hNewsHost[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nSelectedIndex >= 0)
|
||||
@@ -1234,19 +1261,6 @@ STDMETHODIMP CMailNewsPreferences::FillNewsServerList(HWND hControl, LPOLESTR lp
|
||||
return NOERROR;
|
||||
}
|
||||
|
||||
STDMETHODIMP
|
||||
CMailNewsPreferences::GetNewsServerName(HWND hControl, LPOLESTR *lpServerName)
|
||||
{
|
||||
int nIndex = (int)SendMessage(hControl, LB_GETCURSEL, 0,0);
|
||||
if (nIndex != CB_ERR)
|
||||
{
|
||||
MSG_NewsHost* pServer = (MSG_NewsHost*)SendMessage(hControl, LB_GETITEMDATA,
|
||||
(WPARAM)nIndex, 0);
|
||||
*lpServerName = AllocTaskOleString(MSG_GetHostUIName((MSG_Host*)pServer));
|
||||
}
|
||||
return NOERROR;
|
||||
}
|
||||
|
||||
STDMETHODIMP_(BOOL)
|
||||
CMailNewsPreferences::AddNewsServer(HWND hParent, HWND hControl)
|
||||
{
|
||||
@@ -1279,51 +1293,60 @@ CMailNewsPreferences::EditNewsServer(HWND hParent, HWND hControl, BOOL *pChanged
|
||||
if (nIndex >= 0)
|
||||
{
|
||||
parent.Attach(hParent);
|
||||
MSG_Host* pServer = (MSG_Host*)SendMessage(hControl, LB_GETITEMDATA,
|
||||
MSG_NewsHost* pServer = (MSG_NewsHost*)SendMessage(hControl, LB_GETITEMDATA,
|
||||
(WPARAM)nIndex, 0);
|
||||
MSG_Host* pMsgHost = MSG_GetMSGHostFromNewsHost(pServer);
|
||||
|
||||
CNewsServerDialog addServerDialog(&parent, MSG_GetHostUIName(pServer),
|
||||
FROM_PREFERENCE, (MSG_NewsHost*)pServer);
|
||||
if (IDOK == addServerDialog.DoModal())
|
||||
{
|
||||
char* pName = addServerDialog.GetNewsHostName();
|
||||
XP_Bool bSecure = addServerDialog.GetSecure();
|
||||
XP_Bool bAuthentication = addServerDialog.GetAuthentication();
|
||||
int32 nPort = addServerDialog.GetNewsHostPort();
|
||||
|
||||
// set the new value
|
||||
MSG_SetNewsHostPushAuth ((MSG_NewsHost*)pServer, bAuthentication);
|
||||
|
||||
CString csTitle;
|
||||
csTitle.LoadString(IDS_NEWSHOSTPROP);
|
||||
CNewsFolderPropertySheet editServerDialog(csTitle, &parent);
|
||||
MSG_FolderInfo *pFolderInfo = MSG_GetFolderInfoForHost(pMsgHost);
|
||||
editServerDialog.m_pNewsHostPage= new CNewsHostGeneralPropertyPage;
|
||||
editServerDialog.m_pNewsHostPage->SetFolderInfo(pFolderInfo, pServer);
|
||||
editServerDialog.AddPage(editServerDialog.m_pNewsHostPage);
|
||||
if (IDOK == editServerDialog.DoModal())
|
||||
*pChanged = TRUE;
|
||||
parent.Detach();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
parent.Detach();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
parent.Detach();
|
||||
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
STDMETHODIMP CMailNewsPreferences::DeleteNewsServer(HWND hParent, HWND hControl)
|
||||
STDMETHODIMP CMailNewsPreferences::DeleteNewsServer
|
||||
(HWND hParent, HWND hControl, LPVOID FAR* lpDefault)
|
||||
{
|
||||
|
||||
CWnd parent;
|
||||
parent.Attach(hParent);
|
||||
|
||||
MSG_NewsHost* pDefaultServer = (MSG_NewsHost*)(*lpDefault);
|
||||
int nIndex = (int)SendMessage(hControl, LB_GETCURSEL, 0, 0);
|
||||
if (nIndex >= 0)
|
||||
{
|
||||
MSG_Host* pServer = (MSG_Host*)SendMessage(hControl, LB_GETITEMDATA,
|
||||
(WPARAM)nIndex, 0);
|
||||
MSG_NewsHost* pServer = (MSG_NewsHost*)SendMessage(hControl, LB_GETITEMDATA,
|
||||
(WPARAM)nIndex, 0);
|
||||
MSG_Host* pMsgHost = MSG_GetMSGHostFromNewsHost(pServer);
|
||||
|
||||
char* tmp = PR_smprintf(XP_GetString(MK_MSG_REMOVE_HOST_CONFIRM),
|
||||
MSG_GetHostUIName(pServer));
|
||||
MSG_GetHostUIName(pMsgHost));
|
||||
if (IDOK == parent.MessageBox(tmp, szLoadString(AFX_IDS_APP_TITLE), MB_OKCANCEL))
|
||||
{
|
||||
MSG_Master * pMaster = WFE_MSGGetMaster();
|
||||
MSG_DeleteNewsHost(pMaster, (MSG_NewsHost*)pServer);
|
||||
MSG_DeleteNewsHost(pMaster, pServer);
|
||||
SendMessage(hControl, LB_DELETESTRING, nIndex, 0);
|
||||
if (pDefaultServer == pServer)
|
||||
{
|
||||
int nNewDefault;
|
||||
int nTotal = (int)SendMessage(hControl, LB_GETCOUNT, 0, 0);
|
||||
if (nIndex >= nTotal)
|
||||
nNewDefault = nTotal -1;
|
||||
else
|
||||
nNewDefault = nIndex;
|
||||
|
||||
*lpDefault = (LPVOID)SendMessage(hControl, LB_GETITEMDATA,
|
||||
(WPARAM)nNewDefault, 0);
|
||||
}
|
||||
}
|
||||
if(tmp && tmp[0])
|
||||
XP_FREE(tmp);
|
||||
@@ -1349,7 +1372,7 @@ STDMETHODIMP_(BOOL) CMailNewsPreferences::AddMailServer
|
||||
}
|
||||
|
||||
CString title;
|
||||
title.LoadString(IDS_ADD_MAIL_SERVER);
|
||||
title.LoadString(IDS_MAIL_SERVER_PROPERTY);
|
||||
CMailServerPropertySheet addMailServer(&parent, title, NULL, TYPE_IMAP, FALSE, bAllowBoth);
|
||||
if (IDOK == addMailServer.DoModal())
|
||||
{
|
||||
@@ -1382,12 +1405,24 @@ STDMETHODIMP_(BOOL) CMailNewsPreferences::EditMailServer
|
||||
int nIndex = (int)SendMessage(hControl, LB_GETCURSEL, 0, 0);
|
||||
SendMessage(hControl, LB_GETTEXT, (WPARAM)nIndex,
|
||||
(LPARAM)(DWORD)serverName);
|
||||
|
||||
char* pDefault = XP_STRSTR(serverName, szLoadString(IDS_DEFAULT_STRING));
|
||||
if (pDefault)
|
||||
*pDefault = '\0'; //get rid of (Default)
|
||||
|
||||
CMailServerPropertySheet editMailServer(&parent, title, serverName,
|
||||
nType, TRUE, bAllowBoth);
|
||||
if (IDOK == editMailServer.DoModal())
|
||||
{
|
||||
PREF_SavePrefFile();
|
||||
|
||||
char* pNewName = editMailServer.GetMailHostName();
|
||||
if ((nType == TYPE_POP && 0 != lstrcmp(pNewName, serverName)) ||
|
||||
(nType == TYPE_IMAP && editMailServer.IsPopServer()))
|
||||
{
|
||||
SendMessage(hControl, LB_DELETESTRING, nIndex, 0);
|
||||
SendMessage(hControl, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)pNewName);
|
||||
}
|
||||
parent.Detach();
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1413,7 +1448,7 @@ STDMETHODIMP_(BOOL) CMailNewsPreferences::DeleteMailServer
|
||||
|
||||
int nIndex = (int)SendMessage(hControl, LB_GETCURSEL, 0, 0);
|
||||
int nType = (int)dwType;
|
||||
if (nType = TYPE_IMAP)
|
||||
if (nType == TYPE_IMAP)
|
||||
{
|
||||
char serverName[MSG_MAXGROUPNAMELENGTH];
|
||||
|
||||
@@ -1422,6 +1457,9 @@ STDMETHODIMP_(BOOL) CMailNewsPreferences::DeleteMailServer
|
||||
SendMessage(hControl, LB_GETTEXT, (WPARAM)nIndex,
|
||||
(LPARAM)(DWORD)serverName);
|
||||
|
||||
char* pDefault = XP_STRSTR(serverName, szLoadString(IDS_DEFAULT_STRING));
|
||||
if (pDefault)
|
||||
*pDefault = '\0'; //get rid of (Default)
|
||||
int nTotal = MSG_GetIMAPHosts(pMaster, NULL, 0);
|
||||
if (nTotal)
|
||||
{
|
||||
@@ -1433,7 +1471,10 @@ STDMETHODIMP_(BOOL) CMailNewsPreferences::DeleteMailServer
|
||||
{
|
||||
MSG_Host* pMsgHost = MSG_GetMSGHostFromIMAPHost(hImapHost[i]);
|
||||
if (0 == lstrcmp(serverName, MSG_GetHostName(pMsgHost)))
|
||||
{
|
||||
MSG_DeleteIMAPHost(pMaster, hImapHost[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hImapHost)
|
||||
delete [] hImapHost;
|
||||
@@ -1446,6 +1487,35 @@ STDMETHODIMP_(BOOL) CMailNewsPreferences::DeleteMailServer
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
STDMETHODIMP CMailNewsPreferences::SetImapDefaultServer(HWND hControl)
|
||||
{
|
||||
char serverName[MSG_MAXGROUPNAMELENGTH];
|
||||
SendMessage(hControl, LB_GETTEXT, (WPARAM)0, (LPARAM)(DWORD)serverName);
|
||||
|
||||
MSG_Master* pMaster = WFE_MSGGetMaster();
|
||||
|
||||
int nTotal = MSG_GetIMAPHosts(pMaster, NULL, 0);
|
||||
if (nTotal)
|
||||
{
|
||||
MSG_IMAPHost** hImapHost = NULL;
|
||||
hImapHost = new MSG_IMAPHost* [nTotal];
|
||||
ASSERT(hImapHost != NULL);
|
||||
nTotal = MSG_GetIMAPHosts(pMaster, hImapHost, nTotal);
|
||||
for (int i = 0; i < nTotal; i++)
|
||||
{
|
||||
MSG_Host* pMsgHost = MSG_GetMSGHostFromIMAPHost(hImapHost[i]);
|
||||
if (XP_STRSTR(serverName, MSG_GetHostName(pMsgHost)))
|
||||
{
|
||||
MSG_ReorderIMAPHost(pMaster, hImapHost[i], NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hImapHost)
|
||||
delete [] hImapHost;
|
||||
}
|
||||
return NOERROR;
|
||||
}
|
||||
|
||||
STDMETHODIMP CMailNewsPreferences::FillLdapDirList(HWND hControl, LPOLESTR lpServerName)
|
||||
{
|
||||
if (0 == XP_ListCount(m_pLdapServers))
|
||||
@@ -1483,6 +1553,12 @@ STDMETHODIMP CMailNewsPreferences::SetLdapDirAutoComplete(HWND hControl, BOOL bO
|
||||
|
||||
return NOERROR;
|
||||
}
|
||||
|
||||
STDMETHODIMP CMailNewsPreferences::SaveLdapDirAutoComplete()
|
||||
{
|
||||
DIR_SaveServerPreferences(m_pLdapServers);
|
||||
return NOERROR;
|
||||
}
|
||||
#endif /* MOZ_MAIL_NEWS */
|
||||
|
||||
#ifdef MOZ_OFFLINE
|
||||
@@ -1571,7 +1647,7 @@ COfflinePreference::DoSelectDiscussion(HWND hParent)
|
||||
|
||||
parent.Attach(hParent);
|
||||
|
||||
CDlgSelectGroups selDiscussionDlg(&parent);
|
||||
CDlgOfflinePicker selDiscussionDlg(&parent);
|
||||
selDiscussionDlg.DoModal();
|
||||
|
||||
parent.Detach();
|
||||
@@ -1579,14 +1655,67 @@ COfflinePreference::DoSelectDiscussion(HWND hParent)
|
||||
}
|
||||
#endif // MOZ_OFFLINE
|
||||
|
||||
typedef HRESULT (*DllServerFunction)(void);
|
||||
|
||||
static BOOL
|
||||
RegisterCLSIDForDll(char * dllName)
|
||||
{
|
||||
BOOL bRetval = FALSE;
|
||||
char szLib[_MAX_PATH + 32];
|
||||
FE_GetProgramDirectory( szLib, _MAX_PATH + 32 );
|
||||
if ( *szLib ) {
|
||||
strcat( szLib, dllName );
|
||||
|
||||
if(szLib) {
|
||||
HINSTANCE hLibInstance = hLibInstance = LoadLibrary(szLib);
|
||||
#ifdef WIN32
|
||||
if(hLibInstance)
|
||||
#else
|
||||
if(hLibInstance > (HINSTANCE)HINSTANCE_ERROR)
|
||||
#endif
|
||||
{
|
||||
FARPROC RegistryFunc = NULL;
|
||||
|
||||
RegistryFunc = ::GetProcAddress(hLibInstance, "DllRegisterServer");
|
||||
|
||||
if(RegistryFunc) {
|
||||
HRESULT hResult = (RegistryFunc)();
|
||||
|
||||
if(GetScode(hResult) == S_OK) {
|
||||
bRetval = TRUE;
|
||||
}
|
||||
|
||||
RegistryFunc = NULL;
|
||||
}
|
||||
else {
|
||||
/* If the DLL doesn't have those functions then it just doesn't support
|
||||
* self-registration. We don't consider that to be an error
|
||||
*
|
||||
* We should consider checking for the "OleSelfRegister" string in the
|
||||
* StringFileInfo section of the version information resource. If the DLL
|
||||
* has "OleSelfRegister" but doesn't have the self-registration functions
|
||||
* then that would be an error
|
||||
*/
|
||||
bRetval = TRUE;
|
||||
}
|
||||
|
||||
FreeLibrary(hLibInstance);
|
||||
hLibInstance = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bRetval;
|
||||
}
|
||||
|
||||
#ifdef MOZ_MAIL_NEWS
|
||||
static BOOL
|
||||
CreateMailNewsCategory(LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
CreateMailNewsCategory(MWContext *pContext, LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
{
|
||||
BOOL bResult = FALSE;
|
||||
|
||||
// Create the property page providers
|
||||
CMailNewsPreferences *pMailNews = new CMailNewsPreferences;
|
||||
CMailNewsPreferences *pMailNews = new CMailNewsPreferences(pContext);
|
||||
pMailNews->AddRef();
|
||||
|
||||
// Initialize the mail news object. This allows it to load any objects that are
|
||||
@@ -1596,6 +1725,21 @@ CreateMailNewsCategory(LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
if (SUCCEEDED(pMailNews->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
else {
|
||||
// Try to register the dll and initialize again
|
||||
#ifdef _WIN32
|
||||
bResult = RegisterCLSIDForDll("mnpref32.dll");
|
||||
#else
|
||||
bResult = RegisterCLSIDForDll("mnpref16.dll");
|
||||
#endif
|
||||
if (bResult) {
|
||||
if (SUCCEEDED(pMailNews->Init())) {
|
||||
// Get the interface pointer for ISpecifyPropertyPageObjects
|
||||
if (SUCCEEDED(pMailNews->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We're all done with the object
|
||||
pMailNews->Release();
|
||||
@@ -1603,7 +1747,6 @@ CreateMailNewsCategory(LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
}
|
||||
#endif /* MOZ_MAIL_NEWS */
|
||||
|
||||
|
||||
#ifdef MOZ_LOC_INDEP
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CLIPreference
|
||||
@@ -1681,7 +1824,6 @@ CLIPreference::Release()
|
||||
}
|
||||
#endif /* MOZ_LOC_INDEP */
|
||||
|
||||
|
||||
static void
|
||||
ReloadAllWindows()
|
||||
{
|
||||
@@ -1718,6 +1860,21 @@ CreateAppearancesCategory(int nCharsetId, LPSPECIFYPROPERTYPAGEOBJECTS *pCategor
|
||||
if (SUCCEEDED(pAppearance->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
else {
|
||||
// Try to register the dll and initialize again
|
||||
#ifdef _WIN32
|
||||
bResult = RegisterCLSIDForDll("brpref32.dll");
|
||||
#else
|
||||
bResult = RegisterCLSIDForDll("brpref16.dll");
|
||||
#endif
|
||||
if (bResult) {
|
||||
if (SUCCEEDED(pAppearance->Init())) {
|
||||
// Get the interface pointer for ISpecifyPropertyPageObjects
|
||||
if (SUCCEEDED(pAppearance->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We're all done with the object
|
||||
pAppearance->Release();
|
||||
@@ -1743,12 +1900,57 @@ CreateBrowserCategory(MWContext *pContext, LPSPECIFYPROPERTYPAGEOBJECTS *pCatego
|
||||
if (SUCCEEDED(pBrowser->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
else {
|
||||
// Try to register the dll and initialize again
|
||||
#ifdef _WIN32
|
||||
bResult = RegisterCLSIDForDll("brpref32.dll");
|
||||
#else
|
||||
bResult = RegisterCLSIDForDll("brpref16.dll");
|
||||
#endif
|
||||
if (bResult) {
|
||||
if (SUCCEEDED(pBrowser->Init())) {
|
||||
// Get the interface pointer for ISpecifyPropertyPageObjects
|
||||
if (SUCCEEDED(pBrowser->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We're all done with the object
|
||||
pBrowser->Release();
|
||||
return bResult;
|
||||
}
|
||||
|
||||
#ifdef EDITOR
|
||||
static BOOL
|
||||
CreateComposerCategory(LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
{
|
||||
if (SUCCEEDED(CoCreateInstance(CLSID_EditorPrefs,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ISpecifyPropertyPageObjects,
|
||||
(LPVOID *)pCategory))) {
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
// Try to register the dll and initialize again
|
||||
#ifdef _WIN32
|
||||
if (RegisterCLSIDForDll("edpref32.dll")) {
|
||||
#else
|
||||
if (RegisterCLSIDForDll("edpref16.dll")) {
|
||||
#endif
|
||||
if (SUCCEEDED(CoCreateInstance(CLSID_EditorPrefs,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ISpecifyPropertyPageObjects,
|
||||
(LPVOID *)pCategory))) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
#endif /* EDITOR */
|
||||
|
||||
#ifdef MOZ_OFFLINE
|
||||
static BOOL
|
||||
@@ -1767,14 +1969,28 @@ CreateOfflineCategory(LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
if (SUCCEEDED(pOffline->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
|
||||
else {
|
||||
// Try to register the dll and initialize again
|
||||
#ifdef _WIN32
|
||||
bResult = RegisterCLSIDForDll("mnpref32.dll");
|
||||
#else
|
||||
bResult = RegisterCLSIDForDll("mnpref16.dll");
|
||||
#endif
|
||||
if (bResult) {
|
||||
if (SUCCEEDED(pOffline->Init())) {
|
||||
// Get the interface pointer for ISpecifyPropertyPageObjects
|
||||
if (SUCCEEDED(pOffline->QueryInterface(IID_ISpecifyPropertyPageObjects, (LPVOID *)pCategory)))
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We're all done with the object
|
||||
pOffline->Release();
|
||||
return bResult;
|
||||
}
|
||||
#endif /* MOZ_OFFLINE */
|
||||
|
||||
|
||||
#ifdef MOZ_LOC_INDEP
|
||||
static BOOL
|
||||
CreateLICategory(LPSPECIFYPROPERTYPAGEOBJECTS *pCategory)
|
||||
@@ -1868,7 +2084,7 @@ wfe_DisplayPreferences(CGenericFrame *pFrame)
|
||||
|
||||
#ifdef MOZ_MAIL_NEWS
|
||||
// Mail and News category
|
||||
if (CreateMailNewsCategory(&categories[nCategories]))
|
||||
if (CreateMailNewsCategory(pContext, &categories[nCategories]))
|
||||
nCategories++;
|
||||
#endif // MOZ_MAIL_NEWS
|
||||
|
||||
@@ -1880,11 +2096,7 @@ wfe_DisplayPreferences(CGenericFrame *pFrame)
|
||||
|
||||
#ifdef EDITOR
|
||||
// Editor category
|
||||
if (SUCCEEDED(CoCreateInstance(CLSID_EditorPrefs,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ISpecifyPropertyPageObjects,
|
||||
(LPVOID *)&categories[nCategories]))) {
|
||||
if (CreateComposerCategory(&categories[nCategories])) {
|
||||
nCategories++;
|
||||
}
|
||||
#endif EDITOR
|
||||
@@ -1903,7 +2115,7 @@ wfe_DisplayPreferences(CGenericFrame *pFrame)
|
||||
(LPVOID *)&categories[nCategories]))) {
|
||||
nCategories++;
|
||||
}
|
||||
|
||||
|
||||
// Make sure we have at least one category
|
||||
if (nCategories == 0) {
|
||||
pFrame->MessageBox(szLoadString(IDS_CANT_LOAD_PREFS), NULL, MB_OK | MB_ICONEXCLAMATION);
|
||||
|
||||
Reference in New Issue
Block a user