Nikolay Sivov : explorer: Added stub IServiceProvider support for shell browser window.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon May 4 07:58:53 CDT 2015
Module: wine
Branch: master
Commit: 3c7bf0350a1df45f6bbe52cdb631ebb6b49ca11b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c7bf0350a1df45f6bbe52cdb631ebb6b49ca11b
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Apr 30 12:00:54 2015 +0300
explorer: Added stub IServiceProvider support for shell browser window.
---
dlls/shell32/tests/shelldispatch.c | 6 +++---
programs/explorer/desktop.c | 44 ++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/dlls/shell32/tests/shelldispatch.c b/dlls/shell32/tests/shelldispatch.c
index 3d238f0..84d6246 100644
--- a/dlls/shell32/tests/shelldispatch.c
+++ b/dlls/shell32/tests/shelldispatch.c
@@ -572,12 +572,12 @@ if (hr == S_OK) {
ok(hr == E_NOINTERFACE, "got 0x%08x\n", hr);
hr = IDispatch_QueryInterface(disp, &IID_IServiceProvider, (void**)&sp);
-todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
-if (hr == S_OK) {
+
hr = IServiceProvider_QueryService(sp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&sb);
+todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
-
+if (hr == S_OK) {
hr = IServiceProvider_QueryService(sp, &SID_STopLevelBrowser, &IID_IShellBrowser, (void**)&sb2);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(sb == sb2, "got %p, %p\n", sb, sb2);
diff --git a/programs/explorer/desktop.c b/programs/explorer/desktop.c
index 62a07f4..4c7bcd4 100644
--- a/programs/explorer/desktop.c
+++ b/programs/explorer/desktop.c
@@ -139,6 +139,7 @@ struct shellwindows
struct shellbrowserwindow
{
IWebBrowser2 IWebBrowser2_iface;
+ IServiceProvider IServiceProvider_iface;
};
static struct shellwindows shellwindows;
@@ -154,6 +155,11 @@ static inline struct shellbrowserwindow *impl_from_IWebBrowser2(IWebBrowser2 *if
return CONTAINING_RECORD(iface, struct shellbrowserwindow, IWebBrowser2_iface);
}
+static inline struct shellbrowserwindow *impl_from_IServiceProvider(IServiceProvider *iface)
+{
+ return CONTAINING_RECORD(iface, struct shellbrowserwindow, IServiceProvider_iface);
+}
+
static void shellwindows_init(void);
static void desktopshellbrowserwindow_init(void);
@@ -1281,6 +1287,10 @@ static HRESULT WINAPI webbrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid
{
*ppv = &This->IWebBrowser2_iface;
}
+ else if (IsEqualGUID(&IID_IServiceProvider, riid))
+ {
+ *ppv = &This->IServiceProvider_iface;
+ }
if (*ppv)
{
@@ -1908,9 +1918,43 @@ static const IWebBrowser2Vtbl webbrowser2vtbl =
webbrowser_put_Resizable
};
+static HRESULT WINAPI serviceprovider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
+{
+ struct shellbrowserwindow *This = impl_from_IServiceProvider(iface);
+ return IWebBrowser2_QueryInterface(&This->IWebBrowser2_iface, riid, ppv);
+}
+
+static ULONG WINAPI serviceprovider_AddRef(IServiceProvider *iface)
+{
+ struct shellbrowserwindow *This = impl_from_IServiceProvider(iface);
+ return IWebBrowser2_AddRef(&This->IWebBrowser2_iface);
+}
+
+static ULONG WINAPI serviceprovider_Release(IServiceProvider *iface)
+{
+ struct shellbrowserwindow *This = impl_from_IServiceProvider(iface);
+ return IWebBrowser2_Release(&This->IWebBrowser2_iface);
+}
+
+static HRESULT WINAPI serviceprovider_QueryService(IServiceProvider *iface, REFGUID service,
+ REFIID riid, void **ppv)
+{
+ FIXME("%s %s %p\n", debugstr_guid(service), debugstr_guid(riid), ppv);
+ return E_NOTIMPL;
+}
+
+static const IServiceProviderVtbl serviceprovidervtbl =
+{
+ serviceprovider_QueryInterface,
+ serviceprovider_AddRef,
+ serviceprovider_Release,
+ serviceprovider_QueryService
+};
+
static void desktopshellbrowserwindow_init(void)
{
desktopshellbrowserwindow.IWebBrowser2_iface.lpVtbl = &webbrowser2vtbl;
+ desktopshellbrowserwindow.IServiceProvider_iface.lpVtbl = &serviceprovidervtbl;
}
static void shellwindows_init(void)
More information about the wine-cvs
mailing list