Module: wine Branch: master Commit: 8e7a041154e49759d114f928cb6c13d3370c09d9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8e7a041154e49759d114f928cb...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Dec 1 07:33:18 2016 +0300
shell32: Simplify drag drop helper object creation.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/shell32/dragdrophelper.c | 74 ++++++++++++++++++++----------------------- dlls/shell32/tests/shellole.c | 21 ++++++++++++ 2 files changed, 56 insertions(+), 39 deletions(-)
diff --git a/dlls/shell32/dragdrophelper.c b/dlls/shell32/dragdrophelper.c index cae8b8d..0b91449 100644 --- a/dlls/shell32/dragdrophelper.c +++ b/dlls/shell32/dragdrophelper.c @@ -52,43 +52,12 @@ typedef struct { LONG ref; } IDropTargetHelperImpl;
-static const IDropTargetHelperVtbl vt_IDropTargetHelper; - static inline IDropTargetHelperImpl *impl_from_IDropTargetHelper(IDropTargetHelper *iface) { return CONTAINING_RECORD(iface, IDropTargetHelperImpl, IDropTargetHelper_iface); }
/************************************************************************** -* IDropTargetHelper_Constructor -*/ -HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) -{ - IDropTargetHelperImpl *dth; - - TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid)); - - if (!ppv) - return E_POINTER; - if (pUnkOuter) - return CLASS_E_NOAGGREGATION; - - dth = LocalAlloc (LMEM_ZEROINIT, sizeof (IDropTargetHelperImpl)); - if (!dth) return E_OUTOFMEMORY; - - dth->ref = 0; - dth->IDropTargetHelper_iface.lpVtbl = &vt_IDropTargetHelper; - - if (FAILED (IDropTargetHelper_QueryInterface (&dth->IDropTargetHelper_iface, riid, ppv))) { - LocalFree(dth); - return E_NOINTERFACE; - } - - TRACE ("--(%p)\n", dth); - return S_OK; -} - -/************************************************************************** * IDropTargetHelper_fnQueryInterface */ static HRESULT WINAPI IDropTargetHelper_fnQueryInterface (IDropTargetHelper * iface, REFIID riid, LPVOID * ppvObj) @@ -179,12 +148,39 @@ static HRESULT WINAPI IDropTargetHelper_fnShow (IDropTargetHelper * iface, BOOL
static const IDropTargetHelperVtbl vt_IDropTargetHelper = { - IDropTargetHelper_fnQueryInterface, - IDropTargetHelper_fnAddRef, - IDropTargetHelper_fnRelease, - IDropTargetHelper_fnDragEnter, - IDropTargetHelper_fnDragLeave, - IDropTargetHelper_fnDragOver, - IDropTargetHelper_fnDrop, - IDropTargetHelper_fnShow + IDropTargetHelper_fnQueryInterface, + IDropTargetHelper_fnAddRef, + IDropTargetHelper_fnRelease, + IDropTargetHelper_fnDragEnter, + IDropTargetHelper_fnDragLeave, + IDropTargetHelper_fnDragOver, + IDropTargetHelper_fnDrop, + IDropTargetHelper_fnShow }; + +/************************************************************************** +* IDropTargetHelper_Constructor +*/ +HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) +{ + IDropTargetHelperImpl *dth; + HRESULT hr; + + TRACE ("outer=%p %s %p\n", pUnkOuter, shdebugstr_guid (riid), ppv); + + if (!ppv) + return E_POINTER; + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + dth = LocalAlloc (LMEM_ZEROINIT, sizeof (IDropTargetHelperImpl)); + if (!dth) return E_OUTOFMEMORY; + + dth->IDropTargetHelper_iface.lpVtbl = &vt_IDropTargetHelper; + dth->ref = 1; + + hr = IDropTargetHelper_QueryInterface (&dth->IDropTargetHelper_iface, riid, ppv); + IDropTargetHelper_Release (&dth->IDropTargetHelper_iface); + + return hr; +} diff --git a/dlls/shell32/tests/shellole.c b/dlls/shell32/tests/shellole.c index be10733..5d56431 100644 --- a/dlls/shell32/tests/shellole.c +++ b/dlls/shell32/tests/shellole.c @@ -890,12 +890,33 @@ static void test_SHCreateSessionKey(void) RegCloseKey(hkey2); }
+static void test_dragdrophelper(void) +{ + IDropTargetHelper *target; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_DragDropHelper, NULL, CLSCTX_INPROC_SERVER, &IID_IDropTargetHelper, (void **)&target); + ok(hr == S_OK, "Failed to create IDropTargetHelper, %#x\n", hr); + + IDropTargetHelper_Release(target); +} + START_TEST(shellole) { + HRESULT hr; + init();
+ hr = CoInitialize(NULL); + ok(hr == S_OK, "CoInitialize failed (0x%08x)\n", hr); + if (hr != S_OK) + return; + test_SHPropStg_functions(); test_SHCreateQueryCancelAutoPlayMoniker(); test_DragQueryFile(); test_SHCreateSessionKey(); + test_dragdrophelper(); + + CoUninitialize(); }