From: Tarcísio Ladeia de Oliveirawyrquill@gmail.com
The drag and drop helpers require the use of IDataObject with GetData() and SetData() implemented, being able to store "arbitrary private formats". Currently implements the interface with those functions being either empty or not implemented.
Signed-off-by: Tarcísio Ladeia de Oliveira wyrquill@gmail.com --- dlls/shell32/tests/shellole.c | 171 ++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+)
diff --git a/dlls/shell32/tests/shellole.c b/dlls/shell32/tests/shellole.c index 4864d35ea9a..75d475b2c29 100644 --- a/dlls/shell32/tests/shellole.c +++ b/dlls/shell32/tests/shellole.c @@ -1018,6 +1018,169 @@ static void test_SHCreateSessionKey(void) } }
+/** + * DRAG AND DROP HELPERS + */ + +static HRESULT WINAPI DataObject_QueryInterface( + IDataObject *iface, + REFIID riid, + void **pObj) +{ + if (IsEqualIID(riid, &IID_IUnknown) || + IsEqualIID(riid, &IID_IDataObject)) + { + *pObj = iface; + IDataObject_AddRef(iface); + return S_OK; + } + + trace("DataObject_QueryInterface: %s\n", wine_dbgstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI DataObject_AddRef(IDataObject *iface) +{ + return 2; +} + +static ULONG WINAPI DataObject_Release(IDataObject *iface) +{ + return 1; +} + +static HRESULT WINAPI DataObject_GetData_empty( + IDataObject *iface, + FORMATETC *pformatetcIn, + STGMEDIUM *pmedium) +{ + return S_OK; +} + +static HRESULT WINAPI DataObject_SetData_empty( + IDataObject *iface, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease) +{ + return S_OK; +} + +static HRESULT WINAPI DataObject_GetData_notimpl( + IDataObject *iface, + FORMATETC *pformatetcIn, + STGMEDIUM *pmedium) +{ + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_SetData_notimpl( + IDataObject *iface, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease) +{ + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_GetDataHere( + IDataObject *iface, + FORMATETC *pformatetc, + STGMEDIUM *pmedium) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_QueryGetData( + IDataObject *iface, + FORMATETC *pformatetc) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_GetCanonicalFormatEtc( + IDataObject *iface, + FORMATETC *pformatetcIn, + FORMATETC *pformatetcOut) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_EnumFormatEtc( + IDataObject *iface, + DWORD dwDirection, + IEnumFORMATETC **ppenumFormatEtc) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_DAdvise( + IDataObject *iface, + FORMATETC *pformatetc, + DWORD advf, + IAdviseSink *pAdvSink, + DWORD *pdwConnection) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_DUnadvise( + IDataObject *iface, + DWORD dwConnection) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI DataObject_EnumDAdvise( + IDataObject *iface, + IEnumSTATDATA **ppenumAdvise) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static const IDataObjectVtbl dataobject_vtbl = +{ + DataObject_QueryInterface, + DataObject_AddRef, + DataObject_Release, + DataObject_GetData_empty, + DataObject_GetDataHere, + DataObject_QueryGetData, + DataObject_GetCanonicalFormatEtc, + DataObject_SetData_empty, + DataObject_EnumFormatEtc, + DataObject_DAdvise, + DataObject_DUnadvise, + DataObject_EnumDAdvise +}; + +static const IDataObjectVtbl dataobject_vtbl_notimpl = +{ + DataObject_QueryInterface, + DataObject_AddRef, + DataObject_Release, + DataObject_GetData_notimpl, + DataObject_GetDataHere, + DataObject_QueryGetData, + DataObject_GetCanonicalFormatEtc, + DataObject_SetData_notimpl, + DataObject_EnumFormatEtc, + DataObject_DAdvise, + DataObject_DUnadvise, + DataObject_EnumDAdvise +}; + +static IDataObject data_object = { &dataobject_vtbl }; + +static IDataObject data_object_notimpl = { &dataobject_vtbl_notimpl }; + static void test_dragdrophelper(void) { IDragSourceHelper *dragsource; @@ -1031,6 +1194,14 @@ static void test_dragdrophelper(void) ok(hr == S_OK, "QI failed, %#lx\n", hr); IDragSourceHelper_Release(dragsource);
+ /* Temporary (remove warnings from commit) */ + + hr = data_object.lpVtbl->GetData(&data_object, NULL, NULL); + ok(hr == S_OK, "GetData failed, %lx\n", hr); + + hr = data_object_notimpl.lpVtbl->GetData(&data_object_notimpl, NULL, NULL); + ok(hr == E_NOTIMPL, "GetData should not be implemented, but got %lx\n", hr); + IDropTargetHelper_Release(target); }