[PATCH 1/2] shell32: Simplify drag drop helper object creation
Nikolay Sivov
nsivov at codeweavers.com
Wed Nov 30 22:33:18 CST 2016
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
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();
}
--
2.10.2
More information about the wine-patches
mailing list