зеркало из https://github.com/mozilla/pjs.git
First impl of view source and NewWindow2 (thanks Neoplanet!)
Changes to IOleCommandTarget
This commit is contained in:
Родитель
141446af8b
Коммит
477e032935
|
@ -18,10 +18,12 @@
|
|||
#include "stdafx.h"
|
||||
#include "IEHtmlDocument.h"
|
||||
#include "IEHtmlElementCollection.h"
|
||||
#include "MozillaBrowser.h"
|
||||
|
||||
|
||||
CIEHtmlDocument::CIEHtmlDocument()
|
||||
{
|
||||
m_pParent = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,6 +31,10 @@ CIEHtmlDocument::~CIEHtmlDocument()
|
|||
{
|
||||
}
|
||||
|
||||
void CIEHtmlDocument::SetParent(CMozillaBrowser *parent)
|
||||
{
|
||||
m_pParent = parent;
|
||||
}
|
||||
|
||||
HRESULT CIEHtmlDocument::GetIDispatch(IDispatch **pDispatch)
|
||||
{
|
||||
|
@ -640,3 +646,29 @@ HRESULT STDMETHODCALLTYPE CIEHtmlDocument::createStyleSheet(BSTR bstrHref, long
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// IOleCommandTarget implementation
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CIEHtmlDocument::QueryStatus(const GUID __RPC_FAR *pguidCmdGroup, ULONG cCmds, OLECMD __RPC_FAR prgCmds[], OLECMDTEXT __RPC_FAR *pCmdText)
|
||||
{
|
||||
HRESULT hr = E_NOTIMPL;
|
||||
if(m_pParent)
|
||||
{
|
||||
hr = m_pParent->QueryStatus(pguidCmdGroup,cCmds,prgCmds,pCmdText);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CIEHtmlDocument::Exec(const GUID __RPC_FAR *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT __RPC_FAR *pvaIn, VARIANT __RPC_FAR *pvaOut)
|
||||
{
|
||||
HRESULT hr = E_NOTIMPL;
|
||||
if(m_pParent)
|
||||
{
|
||||
hr = m_pParent->Exec(pguidCmdGroup,nCmdID,nCmdexecopt,pvaIn,pvaOut);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,24 +20,35 @@
|
|||
|
||||
#include "IEHtmlNode.h"
|
||||
|
||||
class CMozillaBrowser;
|
||||
|
||||
class CIEHtmlDocument : public CIEHtmlNode,
|
||||
public IDispatchImpl<IHTMLDocument2, &IID_IHTMLDocument2, &LIBID_MSHTML>
|
||||
public IDispatchImpl<IHTMLDocument2, &IID_IHTMLDocument2, &LIBID_MSHTML>,
|
||||
public IOleCommandTarget
|
||||
{
|
||||
public:
|
||||
CIEHtmlDocument();
|
||||
protected:
|
||||
virtual ~CIEHtmlDocument();
|
||||
|
||||
// Pointer to browser that owns the document
|
||||
CMozillaBrowser *m_pParent;
|
||||
public:
|
||||
virtual void SetParent(CMozillaBrowser *parent);
|
||||
|
||||
BEGIN_COM_MAP(CIEHtmlDocument)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IHTMLDocument2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IHTMLDocument, IHTMLDocument2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IHTMLDocument2, IHTMLDocument2)
|
||||
COM_INTERFACE_ENTRY(IOleCommandTarget)
|
||||
END_COM_MAP()
|
||||
|
||||
virtual HRESULT GetIDispatch(IDispatch **pDispatch);
|
||||
|
||||
// IOleCommandTarget methods
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID __RPC_FAR *pguidCmdGroup, ULONG cCmds, OLECMD __RPC_FAR prgCmds[], OLECMDTEXT __RPC_FAR *pCmdText);
|
||||
virtual HRESULT STDMETHODCALLTYPE Exec(const GUID __RPC_FAR *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT __RPC_FAR *pvaIn, VARIANT __RPC_FAR *pvaOut);
|
||||
|
||||
// IHTMLDocument methods
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Script(IDispatch __RPC_FAR *__RPC_FAR *p);
|
||||
|
||||
|
|
|
@ -60,6 +60,9 @@ CMozillaBrowser::CMozillaBrowser()
|
|||
// Controls starts off unbusy
|
||||
m_bBusy = FALSE;
|
||||
|
||||
// the IHTMLDOcument, lazy allocation.
|
||||
m_pDocument = NULL;
|
||||
|
||||
// Register components
|
||||
if (!m_bRegistryInitialized)
|
||||
{
|
||||
|
@ -137,6 +140,13 @@ LRESULT CMozillaBrowser::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
|
|||
// Unload browser helpers
|
||||
UnloadBrowserHelpers();
|
||||
|
||||
// Destroy the htmldoc
|
||||
if (m_pDocument != NULL)
|
||||
{
|
||||
m_pDocument->Release();
|
||||
m_pDocument = NULL;
|
||||
}
|
||||
|
||||
// Destroy layout...
|
||||
if (m_pIWebShell != nsnull)
|
||||
{
|
||||
|
@ -200,6 +210,66 @@ LRESULT CMozillaBrowser::OnPrint(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&
|
|||
}
|
||||
|
||||
|
||||
LRESULT CMozillaBrowser::OnViewSource(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
||||
{
|
||||
// Get the url from the web shell
|
||||
const PRUnichar *pszUrl = nsnull;
|
||||
PRInt32 aHistoryIndex;
|
||||
m_pIWebShell->GetHistoryIndex(aHistoryIndex);
|
||||
m_pIWebShell->GetURL(aHistoryIndex, &pszUrl);
|
||||
|
||||
nsString strUrl(pszUrl);
|
||||
nsString strTemp(nsString("view-source:") + strUrl);
|
||||
strUrl = strTemp;
|
||||
|
||||
CIPtr(IDispatch) spDispNew;
|
||||
VARIANT_BOOL bCancel = VARIANT_FALSE;
|
||||
Fire_NewWindow2(&spDispNew, &bCancel);
|
||||
|
||||
if ((bCancel == VARIANT_FALSE) && spDispNew)
|
||||
{
|
||||
CIPtr(IWebBrowser2) spOther = spDispNew;;
|
||||
if (spOther)
|
||||
{
|
||||
// tack in the viewsource command
|
||||
BSTR bstrURL = SysAllocString(strUrl);
|
||||
CComVariant vURL(bstrURL);
|
||||
VARIANT vNull;
|
||||
vNull.vt = VT_NULL;
|
||||
|
||||
spOther->Navigate2(&vURL, &vNull, &vNull, &vNull, &vNull);
|
||||
|
||||
// when and if we can get the container we should
|
||||
// be able to tell the other windows container not to show toolbars, menus, etc.
|
||||
// we would also be able to show the window. one fix would be to
|
||||
// change the navigate method to set a flag if it's viewing source, and to
|
||||
// have it's document complete method tell it's container to hide toolbars and menu.
|
||||
/*
|
||||
IDispatch *pOtherContainer = NULL;
|
||||
pOther->get_Container(&pOtherContainer);
|
||||
if(pOtherContainer != NULL)
|
||||
{
|
||||
DWebBrowserEvents2 *pOtherEventSink;
|
||||
if(SUCCEEDED(pOtherContainer->QueryInterface(IID_IDWebBrowserEvents2,(void**)&pOtherEventSink)))
|
||||
{
|
||||
__asm int 3
|
||||
|
||||
pOtherEventSink->Release();
|
||||
}
|
||||
|
||||
pOtherContainer->Release();
|
||||
}
|
||||
*/
|
||||
|
||||
SysFreeString(bstrURL);
|
||||
}
|
||||
}
|
||||
|
||||
bHandled = TRUE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
BOOL CMozillaBrowser::IsValid()
|
||||
{
|
||||
return (m_pIWebShell == nsnull) ? FALSE : TRUE;
|
||||
|
@ -717,6 +787,7 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate(BSTR URL, VARIANT __RPC_FAR
|
|||
}
|
||||
|
||||
// Extract the URL parameter
|
||||
nsString sCommand("view");
|
||||
nsString sUrl;
|
||||
if (URL == NULL)
|
||||
{
|
||||
|
@ -729,6 +800,13 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate(BSTR URL, VARIANT __RPC_FAR
|
|||
sUrl = OLE2A(URL);
|
||||
}
|
||||
|
||||
// Check for a view-source op - this is a bit kludgy
|
||||
if (sUrl.Compare(L"view-source:", PR_TRUE, 12) == 0)
|
||||
{
|
||||
sUrl.Left(sCommand, 11);
|
||||
sUrl.Cut(0,12);
|
||||
}
|
||||
|
||||
// Extract the launch flags parameter
|
||||
LONG lFlags = 0;
|
||||
if (Flags &&
|
||||
|
@ -793,8 +871,9 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::Navigate(BSTR URL, VARIANT __RPC_FAR
|
|||
|
||||
// TODO find the correct target frame
|
||||
|
||||
// Load the URL
|
||||
m_pIWebShell->LoadURL(sUrl, pIPostData, bModifyHistory);
|
||||
// Load the URL
|
||||
char *tmpCommand = sCommand.ToNewCString();
|
||||
m_pIWebShell->LoadURL(sUrl, tmpCommand, pIPostData, bModifyHistory);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -979,15 +1058,24 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_Document(IDispatch __RPC_FAR *__R
|
|||
return E_UNEXPECTED;
|
||||
}
|
||||
|
||||
CIEHtmlDocumentInstance *pDocument = NULL;
|
||||
CIEHtmlDocumentInstance::CreateInstance(&pDocument);
|
||||
if (pDocument == NULL)
|
||||
{
|
||||
return E_OUTOFMEMORY;
|
||||
if (m_pDocument == NULL)
|
||||
{
|
||||
CIEHtmlDocumentInstance::CreateInstance(&m_pDocument);
|
||||
if (m_pDocument == NULL)
|
||||
{
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
// addref it so it doesn't go away on us.
|
||||
m_pDocument->AddRef();
|
||||
|
||||
// give it a pointer to us. note that we shouldn't be addref'd by this call, or it would be
|
||||
// a circular reference.
|
||||
m_pDocument->SetParent(this);
|
||||
}
|
||||
|
||||
pDocument->QueryInterface(IID_IDispatch, (void **) ppDisp);
|
||||
pDocument->SetDOMNode(pIDOMDocument);
|
||||
m_pDocument->QueryInterface(IID_IDispatch, (void **) ppDisp);
|
||||
m_pDocument->SetDOMNode(pIDOMDocument);
|
||||
pIDOMDocument->Release();
|
||||
|
||||
return S_OK;
|
||||
|
@ -2002,45 +2090,62 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::put_Resizable(VARIANT_BOOL Value)
|
|||
// To keep things open, all supported commands are in the table below which
|
||||
// can be extended when and if necessary.
|
||||
|
||||
static const GUID CGID_IWebBrowser =
|
||||
{ 0xED016940L, 0xBD5B, 0x11cf, {0xBA, 0x4E, 0x00, 0xC0, 0x4F, 0xD7, 0x08, 0x16} };
|
||||
|
||||
#define HTMLID_FIND 1
|
||||
#define HTMLID_VIEWSOURCE 2
|
||||
#define HTMLID_OPTIONS 3
|
||||
|
||||
struct OleCommandInfo
|
||||
{
|
||||
ULONG nCmdID;
|
||||
const GUID *pCmdGUID;
|
||||
ULONG nWindowsCmdID;
|
||||
wchar_t *szVerbText;
|
||||
wchar_t *szStatusText;
|
||||
};
|
||||
|
||||
struct OleExecData
|
||||
{
|
||||
const GUID *pguidCmdGroup;
|
||||
DWORD nCmdID;
|
||||
DWORD nCmdexecopt;
|
||||
VARIANT *pvaIn;
|
||||
VARIANT *pvaOut;
|
||||
};
|
||||
|
||||
static OleCommandInfo s_aSupportedCommands[] =
|
||||
{
|
||||
{ OLECMDID_PRINT, ID_PRINT, L"Print", L"Print the page" },
|
||||
{ OLECMDID_SAVEAS, 0, L"SaveAs", L"Save the page" },
|
||||
{ OLECMDID_PAGESETUP, ID_PAGESETUP, L"Page Setup", L"Page Setup" },
|
||||
{ OLECMDID_PROPERTIES, 0, L"Properties", L"Show page properties" },
|
||||
{ OLECMDID_CUT, 0, L"Cut", L"Cut selection" },
|
||||
{ OLECMDID_COPY, 0, L"Copy", L"Copy selection" },
|
||||
{ OLECMDID_PASTE, 0, L"Paste", L"Paste as selection" },
|
||||
{ OLECMDID_UNDO, 0, L"Undo", L"Undo" },
|
||||
{ OLECMDID_REDO, 0, L"Redo", L"Redo" },
|
||||
{ OLECMDID_SELECTALL, 0, L"SelectAll", L"Select all" },
|
||||
{ OLECMDID_REFRESH, 0, L"Refresh", L"Refresh" },
|
||||
{ OLECMDID_STOP, 0, L"Stop", L"Stop" },
|
||||
{ OLECMDID_ONUNLOAD, 0, L"OnUnload", L"OnUnload" }
|
||||
{ OLECMDID_PRINT, NULL, ID_PRINT, L"Print", L"Print the page" },
|
||||
{ OLECMDID_SAVEAS, NULL, 0, L"SaveAs", L"Save the page" },
|
||||
{ OLECMDID_PAGESETUP, NULL, ID_PAGESETUP, L"Page Setup", L"Page Setup" },
|
||||
{ OLECMDID_PROPERTIES, NULL, 0, L"Properties", L"Show page properties" },
|
||||
{ OLECMDID_CUT, NULL, 0, L"Cut", L"Cut selection" },
|
||||
{ OLECMDID_COPY, NULL, 0, L"Copy", L"Copy selection" },
|
||||
{ OLECMDID_PASTE, NULL, 0, L"Paste", L"Paste as selection" },
|
||||
{ OLECMDID_UNDO, NULL, 0, L"Undo", L"Undo" },
|
||||
{ OLECMDID_REDO, NULL, 0, L"Redo", L"Redo" },
|
||||
{ OLECMDID_SELECTALL, NULL, 0, L"SelectAll", L"Select all" },
|
||||
{ OLECMDID_REFRESH, NULL, 0, L"Refresh", L"Refresh" },
|
||||
{ OLECMDID_STOP, NULL, 0, L"Stop", L"Stop" },
|
||||
{ OLECMDID_ONUNLOAD, NULL, 0, L"OnUnload", L"OnUnload" },
|
||||
|
||||
// Unsupported IE 4.x command group
|
||||
{ HTMLID_FIND, &CGID_IWebBrowser, 0, L"Find", L"Find" },
|
||||
{ HTMLID_VIEWSOURCE, &CGID_IWebBrowser, 0, L"ViewSource", L"View Source" },
|
||||
{ HTMLID_OPTIONS, &CGID_IWebBrowser, 0, L"Options", L"Options" },
|
||||
};
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMozillaBrowser::QueryStatus(const GUID __RPC_FAR *pguidCmdGroup, ULONG cCmds, OLECMD __RPC_FAR prgCmds[], OLECMDTEXT __RPC_FAR *pCmdText)
|
||||
{
|
||||
// All command groups except the default are ignored
|
||||
if (pguidCmdGroup != NULL)
|
||||
{
|
||||
OLECMDERR_E_UNKNOWNGROUP;
|
||||
}
|
||||
|
||||
if (prgCmds == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
BOOL bCmdGroupFound = FALSE;
|
||||
BOOL bTextSet = FALSE;
|
||||
|
||||
// Iterate through list of commands and flag them as supported/unsupported
|
||||
|
@ -2053,14 +2158,22 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::QueryStatus(const GUID __RPC_FAR *pgu
|
|||
int nSupportedCount = sizeof(s_aSupportedCommands) / sizeof(s_aSupportedCommands[0]);
|
||||
for (int nSupported = 0; nSupported < nSupportedCount; nSupported++)
|
||||
{
|
||||
if (s_aSupportedCommands[nSupported].nCmdID != prgCmds[nCmd].cmdID)
|
||||
OleCommandInfo *pCI = &s_aSupportedCommands[nSupported];
|
||||
|
||||
if (pguidCmdGroup && pCI->pCmdGUID && memcmp(pguidCmdGroup, pCI->pCmdGUID, sizeof(GUID)) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
bCmdGroupFound = TRUE;
|
||||
|
||||
if (pCI->nCmdID != prgCmds[nCmd].cmdID)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Command is supported so flag it and possibly enable it
|
||||
prgCmds[nCmd].cmdf = OLECMDF_SUPPORTED;
|
||||
if (s_aSupportedCommands[nSupported].nWindowsCmdID != 0)
|
||||
if (pCI->nWindowsCmdID != 0)
|
||||
{
|
||||
prgCmds[nCmd].cmdf |= OLECMDF_ENABLED;
|
||||
}
|
||||
|
@ -2072,11 +2185,11 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::QueryStatus(const GUID __RPC_FAR *pgu
|
|||
wchar_t *pszTextToCopy = NULL;
|
||||
if (pCmdText->cmdtextf & OLECMDTEXTF_NAME)
|
||||
{
|
||||
pszTextToCopy = s_aSupportedCommands[nSupported].szVerbText;
|
||||
pszTextToCopy = pCI->szVerbText;
|
||||
}
|
||||
else if (pCmdText->cmdtextf & OLECMDTEXTF_STATUS)
|
||||
{
|
||||
pszTextToCopy = s_aSupportedCommands[nSupported].szStatusText;
|
||||
pszTextToCopy = pCI->szStatusText;
|
||||
}
|
||||
|
||||
// Copy the text
|
||||
|
@ -2101,39 +2214,62 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::QueryStatus(const GUID __RPC_FAR *pgu
|
|||
}
|
||||
}
|
||||
|
||||
// Was the command group found?
|
||||
if (!bCmdGroupFound)
|
||||
{
|
||||
OLECMDERR_E_UNKNOWNGROUP;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMozillaBrowser::Exec(const GUID __RPC_FAR *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT __RPC_FAR *pvaIn, VARIANT __RPC_FAR *pvaOut)
|
||||
{
|
||||
// All command groups except the default are ignored
|
||||
if (pguidCmdGroup != NULL)
|
||||
{
|
||||
OLECMDERR_E_UNKNOWNGROUP;
|
||||
}
|
||||
BOOL bCmdGroupFound = FALSE;
|
||||
|
||||
// Search the support command list
|
||||
int nSupportedCount = sizeof(s_aSupportedCommands) / sizeof(s_aSupportedCommands[0]);
|
||||
for (int nSupported = 0; nSupported < nSupportedCount; nSupported++)
|
||||
{
|
||||
if (s_aSupportedCommands[nSupported].nCmdID != nCmdID)
|
||||
OleCommandInfo *pCI = &s_aSupportedCommands[nSupported];
|
||||
|
||||
if (pguidCmdGroup && pCI->pCmdGUID && memcmp(pguidCmdGroup, pCI->pCmdGUID, sizeof(GUID)) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
bCmdGroupFound = TRUE;
|
||||
|
||||
if (pCI->nCmdID != nCmdID)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Command is supported but not implemented
|
||||
if (s_aSupportedCommands[nSupported].nWindowsCmdID == 0)
|
||||
if (pCI->nWindowsCmdID == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Send ourselves a WM_COMMAND windows message with the associated identifier
|
||||
SendMessage(WM_COMMAND, LOWORD(s_aSupportedCommands[nSupported].nWindowsCmdID));
|
||||
// Send ourselves a WM_COMMAND windows message with the associated
|
||||
// identifier and exec data
|
||||
OleExecData cData;
|
||||
cData.pguidCmdGroup = pguidCmdGroup;
|
||||
cData.nCmdID = nCmdID;
|
||||
cData.nCmdexecopt = nCmdexecopt;
|
||||
cData.pvaIn = pvaIn;
|
||||
cData.pvaOut = pvaOut;
|
||||
SendMessage(WM_COMMAND, LOWORD(pCI->nWindowsCmdID), (LPARAM) &cData);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// Was the command group found?
|
||||
if (!bCmdGroupFound)
|
||||
{
|
||||
OLECMDERR_E_UNKNOWNGROUP;
|
||||
}
|
||||
|
||||
return OLECMDERR_E_NOTSUPPORTED;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,11 +24,10 @@
|
|||
// so don't edit it!
|
||||
#include "CPMozillaControl.h"
|
||||
|
||||
class CWebShellContainer;
|
||||
|
||||
// Commands sent via WM_COMMAND
|
||||
#define ID_PRINT 1
|
||||
#define ID_PAGESETUP 2
|
||||
#define ID_VIEWSOURCE 3
|
||||
|
||||
// Some definitions which are used to make firing events easier
|
||||
#define CDWebBrowserEvents1 CProxyDWebBrowserEvents<CMozillaBrowser>
|
||||
|
@ -38,6 +37,8 @@ class CWebShellContainer;
|
|||
typedef CComPtr<IUnknown> CComUnkPtr;
|
||||
typedef std::vector<CComUnkPtr> ObjectList;
|
||||
|
||||
class CWebShellContainer;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CMozillaBrowser
|
||||
class ATL_NO_VTABLE CMozillaBrowser :
|
||||
|
@ -129,6 +130,7 @@ END_MSG_MAP()
|
|||
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnPrint(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
||||
LRESULT OnPageSetup(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
||||
LRESULT OnViewSource(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
||||
|
||||
// ISupportsErrorInfo
|
||||
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
|
||||
|
@ -149,6 +151,9 @@ protected:
|
|||
// Pointer to web shell manager
|
||||
CWebShellContainer * m_pWebShellContainer;
|
||||
|
||||
// CComObject to IHTMLDocument implementer
|
||||
CIEHtmlDocumentInstance * m_pDocument;
|
||||
|
||||
// Mozilla interfaces
|
||||
nsIWebShell * m_pIWebShell;
|
||||
nsIPref * m_pIPref;
|
||||
|
|
|
@ -265,6 +265,14 @@ SOURCE=.\MozillaBrowser.ico
|
|||
SOURCE=.\MozillaBrowser.rgs
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Mozilla Headers"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\public\nsIWebShell.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\makefile.win
|
||||
|
|
|
@ -48,6 +48,7 @@ extern CComModule _Module;
|
|||
#include <atlcom.h>
|
||||
#include <atlctl.h>
|
||||
#include <mshtml.h>
|
||||
#include <docobj.h>
|
||||
#include <winsock2.h>
|
||||
|
||||
#ifdef USE_PLUGIN
|
||||
|
@ -110,6 +111,7 @@ typedef long int32;
|
|||
#include "ActiveXTypes.h"
|
||||
#include "BrowserDiagnostics.h"
|
||||
#include "PropertyList.h"
|
||||
#include "IEHtmlDocument.h"
|
||||
#include "MozillaControl.h"
|
||||
#include "MozillaBrowser.h"
|
||||
#include "WebShellContainer.h"
|
||||
|
|
|
@ -267,12 +267,34 @@ CWebShellContainer::CanCreateNewWebShell(PRBool& aResult)
|
|||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
CWebShellContainer::SetNewWebShellInfo(const nsString& aName, const nsString& anURL,
|
||||
CWebShellContainer::SetNewWebShellInfo(const nsString& aName, const nsString& anURL,
|
||||
nsIWebShell* aOpenerShell, PRUint32 aChromeMask,
|
||||
nsIWebShell** aNewShell, nsIWebShell** anInnerShell)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
CIPtr(IDispatch) cpDispNew;
|
||||
VARIANT_BOOL bCancel = VARIANT_FALSE;
|
||||
m_pEvents2->Fire_NewWindow2(&cpDispNew, &bCancel);
|
||||
|
||||
if (bCancel == VARIANT_FALSE && cpDispNew)
|
||||
{
|
||||
CIPtr(IWebBrowser2) cpOther = cpDispNew;
|
||||
if (cpDispNew)
|
||||
{
|
||||
BSTR bstrURL = SysAllocString(anURL);
|
||||
CComVariant vURL(bstrURL);
|
||||
VARIANT vNull;
|
||||
vNull.vt = VT_NULL;
|
||||
cpOther->Navigate2(&vURL, &vNull, &vNull, &vNull, &vNull);
|
||||
SysFreeString(bstrURL);
|
||||
}
|
||||
|
||||
rv = NS_OK;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче