X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e81ef29720aa69cd9b20513ac7661b5170eeda62..fd20ceff24ca5f002d6424856e9d19f6d9178fb5:/src/msw/webview_ie.cpp diff --git a/src/msw/webview_ie.cpp b/src/msw/webview_ie.cpp index 439d37dd64..2bdddcdd72 100644 --- a/src/msw/webview_ie.cpp +++ b/src/msw/webview_ie.cpp @@ -83,7 +83,6 @@ bool wxWebViewIE::Create(wxWindow* parent, m_webBrowser->put_RegisterAsDropTarget(VARIANT_TRUE); m_uiHandler = new DocHostUIHandler; - m_uiHandler->AddRef(); m_container = new wxIEContainer(this, IID_IWebBrowser2, m_webBrowser, m_uiHandler); @@ -99,8 +98,6 @@ wxWebViewIE::~wxWebViewIE() { m_factories[i]->Release(); } - - m_uiHandler->Release(); } void wxWebViewIE::LoadURL(const wxString& url) @@ -121,14 +118,13 @@ void wxWebViewIE::SetPage(const wxString& html, const wxString& baseUrl) hr = SafeArrayUnaccessData(psaStrings); - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(!document) return; document->write(psaStrings); document->close(); - document->Release(); SafeArrayDestroy(psaStrings); @@ -149,7 +145,6 @@ void wxWebViewIE::SetPage(const wxString& html, const wxString& baseUrl) return; document->write(psaStrings); - document->Release(); // SafeArrayDestroy calls SysFreeString for each BSTR SafeArrayDestroy(psaStrings); @@ -179,12 +174,12 @@ void wxWebViewIE::SetPage(const wxString& html, const wxString& baseUrl) wxString wxWebViewIE::GetPageSource() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { - IHTMLElement *bodyTag = NULL; - IHTMLElement *htmlTag = NULL; + wxCOMPtr bodyTag; + wxCOMPtr htmlTag; wxString source; HRESULT hr = document->get_body(&bodyTag); if(SUCCEEDED(hr)) @@ -195,12 +190,8 @@ wxString wxWebViewIE::GetPageSource() const BSTR bstr; htmlTag->get_outerHTML(&bstr); source = wxString(bstr); - htmlTag->Release(); } - bodyTag->Release(); } - - document->Release(); return source; } else @@ -536,13 +527,12 @@ wxString wxWebViewIE::GetCurrentURL() const wxString wxWebViewIE::GetCurrentTitle() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { BSTR title; document->get_nameProp(&title); - document->Release(); return wxString(title); } else @@ -560,6 +550,7 @@ bool wxWebViewIE::CanCopy() const { return CanExecCommand("Copy"); } + bool wxWebViewIE::CanPaste() const { return CanExecCommand("Paste"); @@ -584,6 +575,7 @@ bool wxWebViewIE::CanUndo() const { return CanExecCommand("Undo"); } + bool wxWebViewIE::CanRedo() const { return CanExecCommand("Redo"); @@ -601,7 +593,7 @@ void wxWebViewIE::Redo() void wxWebViewIE::SetEditable(bool enable) { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { @@ -610,19 +602,17 @@ void wxWebViewIE::SetEditable(bool enable) else document->put_designMode(SysAllocString(L"Off")); - document->Release(); } } bool wxWebViewIE::IsEditable() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { BSTR mode; document->get_designMode(&mode); - document->Release(); if(wxString(mode) == "On") return true; else @@ -641,11 +631,11 @@ void wxWebViewIE::SelectAll() bool wxWebViewIE::HasSelection() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { - IHTMLSelectionObject* selection; + wxCOMPtr selection; wxString sel; HRESULT hr = document->get_selection(&selection); if(SUCCEEDED(hr)) @@ -653,9 +643,7 @@ bool wxWebViewIE::HasSelection() const BSTR type; selection->get_type(&type); sel = wxString(type); - selection->Release(); } - document->Release(); return sel != "None"; } else @@ -671,33 +659,29 @@ void wxWebViewIE::DeleteSelection() wxString wxWebViewIE::GetSelectedText() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { - IHTMLSelectionObject* selection; + wxCOMPtr selection; wxString selected; HRESULT hr = document->get_selection(&selection); if(SUCCEEDED(hr)) { - IDispatch* disrange; + wxCOMPtr disrange; hr = selection->createRange(&disrange); if(SUCCEEDED(hr)) { - IHTMLTxtRange* range; + wxCOMPtr range; hr = disrange->QueryInterface(IID_IHTMLTxtRange, (void**)&range); if(SUCCEEDED(hr)) { BSTR text; range->get_text(&text); selected = wxString(text); - range->Release(); } - disrange->Release(); } - selection->Release(); } - document->Release(); return selected; } else @@ -708,33 +692,29 @@ wxString wxWebViewIE::GetSelectedText() const wxString wxWebViewIE::GetSelectedSource() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { - IHTMLSelectionObject* selection; + wxCOMPtr selection; wxString selected; HRESULT hr = document->get_selection(&selection); if(SUCCEEDED(hr)) { - IDispatch* disrange; + wxCOMPtr disrange; hr = selection->createRange(&disrange); if(SUCCEEDED(hr)) { - IHTMLTxtRange* range; + wxCOMPtr range; hr = disrange->QueryInterface(IID_IHTMLTxtRange, (void**)&range); if(SUCCEEDED(hr)) { BSTR text; range->get_htmlText(&text); selected = wxString(text); - range->Release(); } - disrange->Release(); } - selection->Release(); } - document->Release(); return selected; } else @@ -745,39 +725,35 @@ wxString wxWebViewIE::GetSelectedSource() const void wxWebViewIE::ClearSelection() { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { - IHTMLSelectionObject* selection; + wxCOMPtr selection; wxString selected; HRESULT hr = document->get_selection(&selection); if(SUCCEEDED(hr)) { selection->empty(); - selection->Release(); } - document->Release(); } } wxString wxWebViewIE::GetPageText() const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { wxString text; - IHTMLElement* body; + wxCOMPtr body; HRESULT hr = document->get_body(&body); if(SUCCEEDED(hr)) { BSTR out; body->get_innerText(&out); text = wxString(out); - body->Release(); } - document->Release(); return text; } else @@ -788,11 +764,11 @@ wxString wxWebViewIE::GetPageText() const void wxWebViewIE::RunScript(const wxString& javascript) { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { - IHTMLWindow2* window; + wxCOMPtr window; wxString language = "javascript"; HRESULT hr = document->get_parentWindow(&window); if(SUCCEEDED(hr)) @@ -804,7 +780,6 @@ void wxWebViewIE::RunScript(const wxString& javascript) SysAllocString(language.wc_str()), &level); } - document->Release(); } } @@ -841,14 +816,13 @@ void wxWebViewIE::RegisterHandler(wxSharedPtr handler) bool wxWebViewIE::CanExecCommand(wxString command) const { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { VARIANT_BOOL enabled; document->queryCommandEnabled(SysAllocString(command.wc_str()), &enabled); - document->Release(); return (enabled == VARIANT_TRUE); } @@ -861,30 +835,25 @@ bool wxWebViewIE::CanExecCommand(wxString command) const void wxWebViewIE::ExecCommand(wxString command) { - IHTMLDocument2* document = GetDocument(); + wxCOMPtr document(GetDocument()); if(document) { document->execCommand(SysAllocString(command.wc_str()), VARIANT_FALSE, VARIANT(), NULL); - document->Release(); } } -IHTMLDocument2* wxWebViewIE::GetDocument() const +wxCOMPtr wxWebViewIE::GetDocument() const { - IDispatch* dispatch; + wxCOMPtr dispatch; + wxCOMPtr document; HRESULT result = m_webBrowser->get_Document(&dispatch); - if(SUCCEEDED(result)) + if(dispatch && SUCCEEDED(result)) { - IHTMLDocument2* document; - dispatch->QueryInterface(IID_IHTMLDocument2, (void**)&document); //document is set to null automatically if the interface isn't supported - return document; - } - else - { - return NULL; + dispatch->QueryInterface(IID_IHTMLDocument2, (void**)&document); } + return document; } bool wxWebViewIE::EnableControlFeature(long flag, bool enable) @@ -892,8 +861,8 @@ bool wxWebViewIE::EnableControlFeature(long flag, bool enable) #if wxUSE_DYNLIB_CLASS wxDynamicLibrary urlMon(wxT("urlmon.dll")); - if( urlMon.IsLoaded() && - urlMon.HasSymbol("CoInternetSetFeatureEnabled") && + if( urlMon.IsLoaded() && + urlMon.HasSymbol("CoInternetSetFeatureEnabled") && urlMon.HasSymbol("CoInternetIsFeatureEnabled")) { typedef HRESULT (WINAPI *CoInternetSetFeatureEnabled_t)(DWORD, DWORD, BOOL); @@ -1296,7 +1265,7 @@ STDMETHODIMP ClassFactory::LockServer(BOOL fLock) return S_OK; } -wxIEContainer::wxIEContainer(wxWindow *parent, REFIID iid, IUnknown *pUnk, +wxIEContainer::wxIEContainer(wxWindow *parent, REFIID iid, IUnknown *pUnk, DocHostUIHandler* uiHandler) : wxActiveXContainer(parent,iid,pUnk) { @@ -1307,7 +1276,7 @@ wxIEContainer::~wxIEContainer() { } -bool wxIEContainer::QueryClientSiteInterface(REFIID iid, void **_interface, +bool wxIEContainer::QueryClientSiteInterface(REFIID iid, void **_interface, const char *&desc) { if (m_uiHandler && IsEqualIID(iid, wxIID_IDocHostUIHandler)) @@ -1319,8 +1288,8 @@ bool wxIEContainer::QueryClientSiteInterface(REFIID iid, void **_interface, return false; } -HRESULT DocHostUIHandler::ShowContextMenu(DWORD dwID, POINT *ppt, - IUnknown *pcmdtReserved, +HRESULT DocHostUIHandler::ShowContextMenu(DWORD dwID, POINT *ppt, + IUnknown *pcmdtReserved, IDispatch *pdispReserved) { wxUnusedVar(dwID); @@ -1332,13 +1301,13 @@ HRESULT DocHostUIHandler::ShowContextMenu(DWORD dwID, POINT *ppt, HRESULT DocHostUIHandler::GetHostInfo(DOCHOSTUIINFO *pInfo) { - //don't show 3d border and ebales themes. + //don't show 3d border and enable themes. pInfo->dwFlags = pInfo->dwFlags | DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_THEME; return S_OK; } HRESULT DocHostUIHandler::ShowUI(DWORD dwID, - IOleInPlaceActiveObject *pActiveObject, + IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc) @@ -1379,7 +1348,7 @@ HRESULT DocHostUIHandler::OnFrameWindowActivate(BOOL fActivate) return E_NOTIMPL; } -HRESULT DocHostUIHandler::ResizeBorder(LPCRECT prcBorder, +HRESULT DocHostUIHandler::ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow) { @@ -1389,7 +1358,7 @@ HRESULT DocHostUIHandler::ResizeBorder(LPCRECT prcBorder, return E_NOTIMPL; } -HRESULT DocHostUIHandler::TranslateAccelerator(LPMSG lpMsg, +HRESULT DocHostUIHandler::TranslateAccelerator(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID) { @@ -1398,10 +1367,15 @@ HRESULT DocHostUIHandler::TranslateAccelerator(LPMSG lpMsg, //control is down? if((GetKeyState(VK_CONTROL) & 0x8000 )) { - //skip CTRL-N, CTRL-F and CTRL-P - if(lpMsg->wParam == 'N' || lpMsg->wParam == 'P' || lpMsg->wParam == 'F') + //skip the accelerators used by the control + switch(lpMsg->wParam) { - return S_OK; + case 'F': + case 'L': + case 'N': + case 'O': + case 'P': + return S_OK; } } //skip F5