Jacek Caban : ieframe: Added INewWindowManager stub implementation.
Alexandre Julliard
julliard at winehq.org
Fri Jan 6 15:31:36 CST 2012
Module: wine
Branch: master
Commit: dcbfd3d0a5a0be164e0faab932a0fd6afc3d25ec
URL: http://source.winehq.org/git/wine.git/?a=commit;h=dcbfd3d0a5a0be164e0faab932a0fd6afc3d25ec
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jan 6 13:00:22 2012 +0100
ieframe: Added INewWindowManager stub implementation.
---
dlls/ieframe/client.c | 5 +++
dlls/ieframe/dochost.c | 1 +
dlls/ieframe/ieframe.h | 7 ++++
dlls/ieframe/shellbrowser.c | 67 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/dlls/ieframe/client.c b/dlls/ieframe/client.c
index d74a303..6a567ae 100644
--- a/dlls/ieframe/client.c
+++ b/dlls/ieframe/client.c
@@ -685,6 +685,11 @@ static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, RE
return IShellBrowser_QueryInterface(&This->browser_service->IShellBrowser_iface, riid, ppv);
}
+ if(IsEqualGUID(&SID_SNewWindowManager, guidService)) {
+ TRACE("SID_SNewWindowManager service\n");
+ return INewWindowManager_QueryInterface(&This->nwm.INewWindowManager_iface, riid, ppv);
+ }
+
FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
return E_NOINTERFACE;
diff --git a/dlls/ieframe/dochost.c b/dlls/ieframe/dochost.c
index 3585eb9..ebc5978 100644
--- a/dlls/ieframe/dochost.c
+++ b/dlls/ieframe/dochost.c
@@ -888,6 +888,7 @@ void DocHost_Init(DocHost *This, IDispatch *disp, const IDocHostContainerVtbl* c
ConnectionPointContainer_Init(&This->cps, (IUnknown*)disp);
IEHTMLWindow_Init(This);
+ NewWindowManager_Init(This);
}
void DocHost_Release(DocHost *This)
diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h
index 5f4de0d..b7a7b02 100644
--- a/dlls/ieframe/ieframe.h
+++ b/dlls/ieframe/ieframe.h
@@ -89,6 +89,11 @@ typedef struct {
DocHost *doc_host;
} IEHTMLWindow;
+typedef struct {
+ INewWindowManager INewWindowManager_iface;
+ DocHost *doc_host;
+} NewWindowManager;
+
typedef struct _IDocHostContainerVtbl
{
ULONG (*addref)(DocHost*);
@@ -145,6 +150,7 @@ struct DocHost {
ConnectionPointContainer cps;
IEHTMLWindow html_window;
+ NewWindowManager nwm;
};
struct WebBrowser {
@@ -233,6 +239,7 @@ void DocHost_Frame_Init(DocHost*) DECLSPEC_HIDDEN;
void release_dochost_client(DocHost*) DECLSPEC_HIDDEN;
void IEHTMLWindow_Init(DocHost*) DECLSPEC_HIDDEN;
+void NewWindowManager_Init(DocHost*) DECLSPEC_HIDDEN;
void HlinkFrame_Init(HlinkFrame*,IUnknown*,DocHost*) DECLSPEC_HIDDEN;
BOOL HlinkFrame_QI(HlinkFrame*,REFIID,void**) DECLSPEC_HIDDEN;
diff --git a/dlls/ieframe/shellbrowser.c b/dlls/ieframe/shellbrowser.c
index 00ba786..b97f3f9 100644
--- a/dlls/ieframe/shellbrowser.c
+++ b/dlls/ieframe/shellbrowser.c
@@ -2,6 +2,7 @@
* Implementation of IShellBrowser interface
*
* Copyright 2011 Piotr Caban for CodeWeavers
+ * Copyright 2012 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -913,3 +914,69 @@ void detach_browser_service(ShellBrowser *sb)
sb->doc_host = NULL;
IShellBrowser_Release(&sb->IShellBrowser_iface);
}
+
+static inline NewWindowManager *impl_from_INewWindowManager(INewWindowManager *iface)
+{
+ return CONTAINING_RECORD(iface, NewWindowManager, INewWindowManager_iface);
+}
+
+static HRESULT WINAPI NewWindowManager_QueryInterface(INewWindowManager *iface, REFIID riid, void **ppv)
+{
+ NewWindowManager *This = impl_from_INewWindowManager(iface);
+
+ if(IsEqualGUID(&IID_IUnknown, riid)) {
+ TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
+ *ppv = &This->INewWindowManager_iface;
+ }else if(IsEqualGUID(&IID_INewWindowManager, riid)) {
+ TRACE("(%p)->(IID_INewWindowManager %p)\n", This, ppv);
+ *ppv = &This->INewWindowManager_iface;
+ }else {
+ WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI NewWindowManager_AddRef(INewWindowManager *iface)
+{
+ NewWindowManager *This = impl_from_INewWindowManager(iface);
+
+ TRACE("(%p)\n", This);
+
+ return IOleClientSite_AddRef(&This->doc_host->IOleClientSite_iface);
+}
+
+static ULONG WINAPI NewWindowManager_Release(INewWindowManager *iface)
+{
+ NewWindowManager *This = impl_from_INewWindowManager(iface);
+
+ TRACE("(%p)\n", This);
+
+ return IOleClientSite_Release(&This->doc_host->IOleClientSite_iface);
+}
+
+static HRESULT WINAPI NewWindowManager_EvaluateNewWindow(INewWindowManager *iface, LPCWSTR pszUrl,
+ LPCWSTR pszName, LPCWSTR pszUrlContext, LPCWSTR pszFeatures, BOOL fReplace, DWORD dwFlags,
+ DWORD dwUserActionTime)
+{
+ NewWindowManager *This = impl_from_INewWindowManager(iface);
+ FIXME("(%p)->(%s %s %s %s %x %x %d)\n", This, debugstr_w(pszUrl), debugstr_w(pszName), debugstr_w(pszUrlContext),
+ debugstr_w(pszFeatures), fReplace, dwFlags, dwUserActionTime);
+ return S_OK;
+}
+
+static const INewWindowManagerVtbl NewWindowManagerVtbl = {
+ NewWindowManager_QueryInterface,
+ NewWindowManager_AddRef,
+ NewWindowManager_Release,
+ NewWindowManager_EvaluateNewWindow
+};
+
+void NewWindowManager_Init(DocHost *doc_host)
+{
+ doc_host->nwm.INewWindowManager_iface.lpVtbl = &NewWindowManagerVtbl;
+ doc_host->nwm.doc_host = doc_host;
+}
More information about the wine-cvs
mailing list