From 9aee0c87bb69ad7173c0779eb53d660ea41e4229 Mon Sep 17 00:00:00 2001 From: "locka%iol.ie" Date: Wed, 27 Oct 1999 23:19:27 +0000 Subject: [PATCH] Fixed some bugs in the copy to clipboard operation. Control now calls NS_ShutdownXPCOM during destruction --- webshell/embed/ActiveX/MozillaBrowser.cpp | 60 ++++++++++++++++------- webshell/embed/ActiveX/MozillaBrowser.h | 2 +- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/webshell/embed/ActiveX/MozillaBrowser.cpp b/webshell/embed/ActiveX/MozillaBrowser.cpp index 1c164a93d39..a7b0239cb56 100644 --- a/webshell/embed/ActiveX/MozillaBrowser.cpp +++ b/webshell/embed/ActiveX/MozillaBrowser.cpp @@ -43,6 +43,8 @@ extern "C" void NS_SetupRegistry(); static const std::string c_szPrefsHomePage = "browser.startup.homepage"; static const std::string c_szDefaultPage = "resource:/res/MozillaControl.html"; +static const tstring c_szHelpKey = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects"); + #define MOZ_CONTROL_REG_KEY _T("Software\\Mozilla\\") #define MOZ_CONTROL_REG_VALUE_DIR _T("Dir") #define MOZ_CONTROL_REG_VALUE_COMPONENT_PATH _T("ComponentPath") @@ -71,6 +73,7 @@ CMozillaBrowser::CMozillaBrowser() // Initialize layout interfaces m_pIWebShell = nsnull; m_pIPref = nsnull; + m_pIServiceManager = nsnull; // Ready state of control m_nBrowserReadyState = READYSTATE_UNINITIALIZED; @@ -313,19 +316,23 @@ LRESULT CMozillaBrowser::OnCut(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& b { nsresult res; - nsIPresShell* presShell = nsnull; - res=GetPresShell(&presShell); //Get the presentation shell for the document - if ( NS_FAILED(res) ) return NS_ERROR_NOT_INITIALIZED; + nsIPresShell* pIPresShell = nsnull; + res = GetPresShell(&pIPresShell); //Get the presentation shell for the document + if (NS_FAILED(res) || pIPresShell == nsnull) + { + return NS_ERROR_NOT_INITIALIZED; + } nsCOMPtr selection; //Get a pointer to the DOM selection - res = presShell->GetSelection(SELECTION_NORMAL, getter_AddRefs(selection)); + res = pIPresShell->GetSelection(SELECTION_NORMAL, getter_AddRefs(selection)); if ( NS_FAILED(res) ) return res; - res = presShell->DoCopy(); //Copy the selection to the clipboard + res = pIPresShell->DoCopy(); //Copy the selection to the clipboard if ( NS_SUCCEEDED(res) ) { res = selection->DeleteFromDocument(); //Delete the selection from the document - } + } + NS_RELEASE(pIPresShell); return res; } @@ -334,12 +341,16 @@ LRESULT CMozillaBrowser::OnCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& { nsresult res; - nsIPresShell* presShell = nsnull; - res=GetPresShell(&presShell); //Get the presentation shell for the document - if ( NS_FAILED(res) ) return NS_ERROR_NOT_INITIALIZED; + nsIPresShell* pIPresShell = nsnull; + res = GetPresShell(&pIPresShell); //Get the presentation shell for the document + if (NS_FAILED(res) || pIPresShell == nsnull) + { + return NS_ERROR_NOT_INITIALIZED; + } + + res = pIPresShell->DoCopy(); + NS_RELEASE(pIPresShell); - res = presShell->DoCopy(); - return res; } @@ -436,7 +447,6 @@ static NS_DEFINE_CID(kPrefCID, NS_PREF_CID); HRESULT CMozillaBrowser::InitWebShell() { // Initialise XPCOM - nsIServiceManager *pIServiceManager = nsnull; TCHAR szComponentPath[MAX_PATH]; TCHAR szComponentFile[MAX_PATH]; DWORD dwComponentPath = sizeof(szComponentPath) / sizeof(szComponentPath[0]); @@ -452,11 +462,11 @@ HRESULT CMozillaBrowser::InitWebShell() m_pComponentPath = new nsFileSpec(T2A(szComponentPath)); m_pComponentFile = new nsFileSpec(T2A(szComponentFile)); - NS_InitXPCOM(&pIServiceManager, m_pComponentFile, m_pComponentPath); + NS_InitXPCOM(&m_pIServiceManager, m_pComponentFile, m_pComponentPath); } else { - NS_InitXPCOM(&pIServiceManager, nsnull, nsnull); + NS_InitXPCOM(&m_pIServiceManager, nsnull, nsnull); } // Register components @@ -488,8 +498,22 @@ HRESULT CMozillaBrowser::InitWebShell() HRESULT CMozillaBrowser::TermWebShell() { // XXX: Do not call DestroyThreadEventQueue(...) for now... - // TODO terminate XPCOM - // TODO delete m_pComponentFile && m_pComponentPath + + // Terminate XPCOM & cleanup + NS_ShutdownXPCOM(m_pIServiceManager); + m_pIServiceManager = nsnull; + + if (m_pComponentPath) + { + delete m_pComponentPath; + m_pComponentPath = NULL; + } + if (m_pComponentFile) + { + delete m_pComponentFile; + m_pComponentFile = NULL; + } + return S_OK; } @@ -787,8 +811,6 @@ HRESULT CMozillaBrowser::GetDOMDocument(nsIDOMDocument **pDocument) } -static const tstring c_szHelpKey = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects"); - // Load any browser helpers HRESULT CMozillaBrowser::LoadBrowserHelpers() { @@ -2623,6 +2645,7 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Resizable(VARIANT_BOOL Value) /////////////////////////////////////////////////////////////////////////////// // Ole Command Handlers + HRESULT _stdcall CMozillaBrowser::EditModeHandler(CMozillaBrowser *pThis, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) { BOOL bEditorMode = (nCmdID == IDM_EDITMODE) ? TRUE : FALSE; @@ -2630,6 +2653,7 @@ HRESULT _stdcall CMozillaBrowser::EditModeHandler(CMozillaBrowser *pThis, const return S_OK; } + HRESULT _stdcall CMozillaBrowser::EditCommandHandler(CMozillaBrowser *pThis, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) { pThis->OnEditorCommand(nCmdID); diff --git a/webshell/embed/ActiveX/MozillaBrowser.h b/webshell/embed/ActiveX/MozillaBrowser.h index e8fcedee119..6788c7c3e11 100644 --- a/webshell/embed/ActiveX/MozillaBrowser.h +++ b/webshell/embed/ActiveX/MozillaBrowser.h @@ -162,7 +162,6 @@ BEGIN_OLECOMMAND_TABLE() OLECOMMAND_MESSAGE(OLECMDID_PASTE, NULL, ID_PASTE, L"Paste", L"Paste as selection") OLECOMMAND_MESSAGE(OLECMDID_SELECTALL, NULL, ID_SELECTALL, L"SelectAll", L"Select all") OLECOMMAND_MESSAGE(OLECMDID_PROPERTIES, NULL, ID_PROPERTIES, L"Properties", L"Show page properties") - // Unsupported IE 4.x command group OLECOMMAND_MESSAGE(HTMLID_FIND, &CGID_IWebBrowser, 0, L"Find", L"Find") OLECOMMAND_MESSAGE(HTMLID_VIEWSOURCE, &CGID_IWebBrowser, 0, L"ViewSource", L"View Source") @@ -302,6 +301,7 @@ protected: nsIWebShell * m_pIWebShell; nsIPref * m_pIPref; nsIEditor * m_pEditor; + nsIServiceManager * m_pIServiceManager; // System registry key for various control settings CRegKey m_SystemKey;