Andrew Eikum : packager: Implement IOleObject::SetClientSite.
Alexandre Julliard
julliard at winehq.org
Thu Jun 19 14:26:40 CDT 2014
Module: wine
Branch: master
Commit: 07e9d33f39730ff50646bda53ca2d510140e118d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=07e9d33f39730ff50646bda53ca2d510140e118d
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Wed Jun 18 14:57:13 2014 -0500
packager: Implement IOleObject::SetClientSite.
---
dlls/packager/packager_main.c | 18 ++++++++--
dlls/packager/tests/oleobj.c | 78 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 94 insertions(+), 2 deletions(-)
diff --git a/dlls/packager/packager_main.c b/dlls/packager/packager_main.c
index 4735383..942ae72 100644
--- a/dlls/packager/packager_main.c
+++ b/dlls/packager/packager_main.c
@@ -44,6 +44,8 @@ struct Package {
LONG ref;
WCHAR filename[MAX_PATH];
+
+ IOleClientSite *clientsite;
};
static inline struct Package *impl_from_IOleObject(IOleObject *iface)
@@ -95,6 +97,9 @@ static ULONG WINAPI OleObject_Release(IOleObject *iface)
TRACE("(%p) ref=%d\n", This, ref);
if(!ref){
+ if(This->clientsite)
+ IOleClientSite_Release(This->clientsite);
+
if(*This->filename)
DeleteFileW(This->filename);
@@ -107,8 +112,17 @@ static ULONG WINAPI OleObject_Release(IOleObject *iface)
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
{
struct Package *This = impl_from_IOleObject(iface);
- FIXME("(%p)->(%p)\n", This, pClientSite);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, pClientSite);
+
+ if(This->clientsite)
+ IOleClientSite_Release(This->clientsite);
+
+ This->clientsite = pClientSite;
+ if(pClientSite)
+ IOleClientSite_AddRef(pClientSite);
+
+ return S_OK;
}
static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, IOleClientSite **ppClientSite)
diff --git a/dlls/packager/tests/oleobj.c b/dlls/packager/tests/oleobj.c
index 5ff536a..912dda9 100644
--- a/dlls/packager/tests/oleobj.c
+++ b/dlls/packager/tests/oleobj.c
@@ -334,6 +334,78 @@ static IStorage stg = {
&stg_vtbl
};
+static HRESULT WINAPI clientsite_QueryInterface(IOleClientSite* This,
+ REFIID riid, void **ppvObject)
+{
+ ok(0, "query interface\n");
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI clientsite_AddRef(IOleClientSite* This)
+{
+ return 2;
+}
+
+static ULONG WINAPI clientsite_Release(IOleClientSite* This)
+{
+ return 1;
+}
+
+static HRESULT WINAPI clientsite_SaveObject(IOleClientSite* This)
+{
+ ok(0, "saveobject\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI clientsite_GetMoniker(IOleClientSite* This,
+ DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
+{
+ ok(0, "getmoniker\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI clientsite_GetContainer(IOleClientSite* This,
+ IOleContainer **ppContainer)
+{
+ ok(0, "getcontainer\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI clientsite_ShowObject(IOleClientSite* This)
+{
+ ok(0, "showobject\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI clientsite_OnShowWindow(IOleClientSite* This,
+ BOOL fShow)
+{
+ ok(0, "onshowwindow\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI clientsite_RequestNewObjectLayout(IOleClientSite* This)
+{
+ ok(0, "requestnewobjectlayout\n");
+ return E_NOTIMPL;
+}
+
+static IOleClientSiteVtbl clientsite_vtbl = {
+ clientsite_QueryInterface,
+ clientsite_AddRef,
+ clientsite_Release,
+ clientsite_SaveObject,
+ clientsite_GetMoniker,
+ clientsite_GetContainer,
+ clientsite_ShowObject,
+ clientsite_OnShowWindow,
+ clientsite_RequestNewObjectLayout
+};
+
+static IOleClientSite clientsite = {
+ &clientsite_vtbl
+};
+
static void test_packager(void)
{
IOleObject *oleobj;
@@ -363,6 +435,12 @@ static void test_packager(void)
&IID_IOleObject, (void**)&oleobj);
ok(hr == S_OK, "CoCreateInstance(CLSID_Package_Alt) failed: %08x\n", hr);
+ hr = IOleObject_SetClientSite(oleobj, NULL);
+ ok(hr == S_OK, "SetClientSite failed: %08x\n", hr);
+
+ hr = IOleObject_SetClientSite(oleobj, &clientsite);
+ ok(hr == S_OK, "SetClientSite failed: %08x\n", hr);
+
hr = IOleObject_QueryInterface(oleobj, &IID_IPersistStorage, (void**)&persist);
ok(hr == S_OK, "QueryInterface(IPersistStorage) failed: %08x\n", hr);
More information about the wine-cvs
mailing list