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