36 METHOD(DO_EnumFormatEtc), \
37 METHOD(DO_QueryGetData), \
38 METHOD(EnumFMT_Next), \
39 METHOD(EnumFMT_Reset), \
40 METHOD(EnumFMT_Skip), \
41 METHOD(DS_QueryContinueDrag), \
42 METHOD(DS_GiveFeedback), \
43 METHOD(DT_DragEnter), \
45 METHOD(DT_DragLeave), \
46 METHOD(DT_DragOver), \
47 METHOD(DoDragDrop_effect_in), \
48 METHOD(DoDragDrop_ret), \
49 METHOD(DoDragDrop_effect_out), \
90 }
while ((++
call_ptr)->method != end_seq);
100#define check_expect(func, expect_param, set_param) \
101 check_expect_((func), (expect_param), (set_param), __FILE__, __LINE__)
107 { DoDragDrop_effect_in, 0, 0, DROPEFFECT_COPY, 0 },
108 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
109 { EnumFMT_Next, 0,
S_OK, 0, 1 },
110 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
111 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
112 { EnumFMT_Next, 0,
S_OK, 0, 1 },
113 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
114 { DO_QueryGetData, 0,
S_OK, 0, 1 },
117 { DT_DragEnter, DROPEFFECT_COPY,
S_OK, DROPEFFECT_COPY, 0 },
119 { DT_Drop, DROPEFFECT_COPY, 0xbeefbeef, DROPEFFECT_COPY, 0 },
121 { DoDragDrop_ret, 0xbeefbeef, 0, 0, 0, },
122 { DoDragDrop_effect_out, DROPEFFECT_COPY, 0, 0, 0 },
123 { end_seq, 0, 0, 0, 0 }
126 { DoDragDrop_effect_in, 0, 0, 0, 0 },
127 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
128 { EnumFMT_Next, 0,
S_OK, 0, 1 },
129 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
130 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
131 { EnumFMT_Next, 0,
S_OK, 0, 1 },
132 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
133 { DO_QueryGetData, 0,
S_OK, 0, 1 },
136 { DT_DragEnter, 0,
S_OK, DROPEFFECT_COPY, 0 },
138 { DT_DragLeave, 0, 0, 0, 0 },
141 { DoDragDrop_effect_out, 0, 0, 0, 0 },
142 { end_seq, 0, 0, 0, 0 }
145 { DoDragDrop_effect_in, 0, 0, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0 },
146 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
147 { EnumFMT_Next, 0,
S_OK, 0, 1 },
148 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
149 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
150 { EnumFMT_Next, 0,
S_OK, 0, 1 },
151 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
152 { DO_QueryGetData, 0,
S_OK, 0, 1 },
155 { DT_DragEnter, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
157 { DT_Drop, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0, 0, 0 },
160 { DoDragDrop_effect_out, 0, 0, 0, 0 },
161 { end_seq, 0, 0, 0, 0 }
164 { DoDragDrop_effect_in, 0, 0, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0 },
165 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
166 { EnumFMT_Next, 0,
S_OK, 0, 1 },
167 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
168 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
169 { EnumFMT_Next, 0,
S_OK, 0, 1 },
170 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
171 { DO_QueryGetData, 0,
S_OK, 0, 1 },
173 { DS_QueryContinueDrag, 0,
S_OK, 0, 0 },
174 { DT_DragEnter, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
176 { DT_DragOver, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
179 { DS_QueryContinueDrag, 0,
S_OK, 0, 0 },
180 { DT_DragOver, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
184 { DT_Drop, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0, 0, 0 },
187 { DoDragDrop_effect_out, 0, 0, 0, 0 },
188 { end_seq, 0, 0, 0, 0 }
191 { DoDragDrop_effect_in, 0, 0, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0 },
192 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
193 { EnumFMT_Next, 0,
S_OK, 0, 1 },
194 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
195 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
196 { EnumFMT_Next, 0,
S_OK, 0, 1 },
197 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
198 { DO_QueryGetData, 0,
S_OK, 0, 1 },
203 { DoDragDrop_effect_out, 0, 0, 0, 0 },
204 { end_seq, 0, 0, 0, 0 }
207 { DoDragDrop_effect_in, 0, 0, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0 },
208 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
209 { EnumFMT_Next, 0,
S_OK, 0, 1 },
210 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
211 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
212 { EnumFMT_Next, 0,
S_OK, 0, 1 },
213 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
214 { DO_QueryGetData, 0,
S_OK, 0, 1 },
216 { DS_QueryContinueDrag, 0,
S_OK, 0, 0 },
217 { DT_DragEnter, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
219 { DT_DragOver, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
222 { DS_QueryContinueDrag, 0,
S_OK, 0, 0 },
223 { DT_DragOver, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
227 { DT_DragLeave, 0, 0, 0, 0 },
230 { DoDragDrop_effect_out, 0, 0, 0, 0 },
231 { end_seq, 0, 0, 0, 0 }
234 { DoDragDrop_effect_in, 0, 0, DROPEFFECT_COPY | DROPEFFECT_MOVE, 0 },
235 { DO_EnumFormatEtc, 0,
S_OK, 0, 1 },
236 { EnumFMT_Next, 0,
S_OK, 0, 1 },
237 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
238 { EnumFMT_Reset, 0,
S_OK, 0, 1 },
239 { EnumFMT_Next, 0,
S_OK, 0, 1 },
240 { EnumFMT_Next, 0,
S_FALSE, 0, 1 },
241 { DO_QueryGetData, 0,
S_OK, 0, 1 },
243 { DS_QueryContinueDrag, 0,
S_OK, 0, 0 },
244 { DT_DragEnter, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
246 { DT_DragOver, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
249 { DS_QueryContinueDrag, 0,
S_OK, 0, 0 },
250 { DT_DragOver, DROPEFFECT_COPY | DROPEFFECT_MOVE,
S_OK, DROPEFFECT_COPY, 0 },
253 { DS_QueryContinueDrag, 0,
E_FAIL, 0, 0 },
254 { DT_DragLeave, 0, 0, 0, 0 },
256 { DoDragDrop_ret,
E_FAIL, 0, 0, 0 },
257 { DoDragDrop_effect_out, 0, 0, 0, 0 },
258 { end_seq, 0, 0, 0, 0 }
265#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr)
270 ok(0,
"DropTarget_QueryInterface() shouldn't be called\n");
274 IDropTarget_AddRef(iface);
299 return check_expect(DT_DragEnter, *pdwEffect, pdwEffect);
307 return check_expect(DT_DragOver, *pdwEffect, pdwEffect);
341 IDropSource_AddRef(iface);
385 ok(0,
"unexpected call\n");
400 ULONG celt, FORMATETC *rgelt,
ULONG *pceltFetched)
402 static FORMATETC
format = {
CF_TEXT,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
405 ok(celt == 1,
"celt = %d\n", celt);
406 ok(rgelt !=
NULL,
"rgelt == NULL\n");
407 ok(pceltFetched ==
NULL,
"pceltFetched != NULL\n");
426 ok(0,
"unexpected call\n");
451 IDataObject_AddRef(iface);
471 FORMATETC *pformatetcIn,
474 ok(0,
"unexpected call\n");
480 FORMATETC *pformatetc,
483 ok(0,
"unexpected call\n");
489 FORMATETC *pformatetc)
496 FORMATETC *pformatectIn,
497 FORMATETC *pformatetcOut)
499 ok(0,
"unexpected call\n");
505 FORMATETC *pformatetc,
509 ok(0,
"unexpected call\n");
525 FORMATETC *pformatetc,
528 DWORD *pdwConnection)
530 ok(0,
"unexpected call\n");
538 ok(0,
"unexpected call\n");
546 ok(0,
"unexpected call\n");
599 "RegisterDragDrop without OLE initialized should have returned E_OUTOFMEMORY instead of 0x%08x\n",
hr);
604 ok(
hr ==
E_INVALIDARG,
"RegisterDragDrop with NULL IDropTarget * should return E_INVALIDARG instead of 0x%08x\n",
hr);
731 skip(
"ROSTESTS-182: Skipping ole32_winetest:dragdrop test_DoDragDrop because it hangs on WHS-Testbot. Set winetest_interactive to run it anyway.\n");
#define CO_E_NOTINITIALIZED
int strcmp(const char *String1, const char *String2)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
HRESULT WINAPI DoDragDrop(IDataObject *pDataObject, IDropSource *pDropSource, DWORD dwOKEffect, DWORD *pdwEffect)
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
static HRESULT WINAPI DataObject_GetCanonicalFormatEtc(IDataObject *iface, FORMATETC *pformatectIn, FORMATETC *pformatetcOut)
static HRESULT WINAPI DataObject_GetDataHere(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
static ATOM register_dummy_class(void)
static ULONG WINAPI EnumFORMATETC_Release(IEnumFORMATETC *iface)
static void test_Register_Revoke(void)
static HRESULT WINAPI DropSource_QueryInterface(IDropSource *iface, REFIID riid, void **ppObj)
static HRESULT WINAPI DataObject_DAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
static HRESULT WINAPI DropTarget_DragLeave(IDropTarget *iface)
struct method_call call_lists[][30]
static HRESULT WINAPI EnumFORMATETC_Next(IEnumFORMATETC *iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched)
static HRESULT WINAPI DropSource_GiveFeedback(IDropSource *iface, DWORD dwEffect)
#define ok_ole_success(hr, func)
static ULONG WINAPI DataObject_AddRef(IDataObject *iface)
static ULONG WINAPI DataObject_Release(IDataObject *iface)
static HRESULT WINAPI DropTarget_DragOver(IDropTarget *iface, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
static const IDropSourceVtbl dropsource_vtbl
static HRESULT WINAPI DropTarget_Drop(IDropTarget *iface, IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
static HRESULT WINAPI EnumFORMATETC_QueryInterface(IEnumFORMATETC *iface, REFIID riid, void **ppvObj)
static HRESULT WINAPI EnumFORMATETC_Skip(IEnumFORMATETC *iface, ULONG celt)
static HRESULT WINAPI DropTarget_DragEnter(IDropTarget *iface, IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
static HRESULT WINAPI DropSource_QueryContinueDrag(IDropSource *iface, BOOL fEscapePressed, DWORD grfKeyState)
static ULONG WINAPI EnumFORMATETC_AddRef(IEnumFORMATETC *iface)
static IEnumFORMATETC EnumFORMATETC
static ULONG WINAPI DropSource_Release(IDropSource *iface)
static HRESULT WINAPI DataObject_QueryInterface(IDataObject *iface, REFIID riid, void **pObj)
static ULONG WINAPI DropTarget_AddRef(IDropTarget *iface)
static const IEnumFORMATETCVtbl enumformatetc_vtbl
static HRESULT WINAPI DataObject_DUnadvise(IDataObject *iface, DWORD dwConnection)
static IDataObject DataObject
static HRESULT check_expect_(enum method func, DWORD expect_param, DWORD *set_param, const char *file, int line)
static void test_DoDragDrop(void)
static HRESULT WINAPI DataObject_QueryGetData(IDataObject *iface, FORMATETC *pformatetc)
static HRESULT WINAPI DataObject_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
static ULONG WINAPI DropSource_AddRef(IDropSource *iface)
static int droptarget_refs
static IDropTarget DropTarget
static HRESULT WINAPI DataObject_SetData(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
const struct method_call * call_ptr
static IDropSource DropSource
static ULONG WINAPI DropTarget_Release(IDropTarget *iface)
static HRESULT WINAPI EnumFORMATETC_Clone(IEnumFORMATETC *iface, IEnumFORMATETC **ppenum)
static HRESULT WINAPI DataObject_EnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
static const char * method_names[]
static const IDataObjectVtbl dataobject_vtbl
static HRESULT WINAPI DropTarget_QueryInterface(IDropTarget *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI EnumFORMATETC_Reset(IEnumFORMATETC *iface)
static const IDropTargetVtbl DropTarget_VTbl
static HRESULT WINAPI DataObject_GetData(IDataObject *iface, FORMATETC *pformatetcIn, STGMEDIUM *pmedium)
#define check_expect(func, expect_param, set_param)
#define todo_wine_if(is_todo)
const GUID IID_IDataObject
#define IsEqualIID(riid1, riid2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
const char * winetest_platform
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
#define DRAGDROP_E_ALREADYREGISTERED
#define DRAGDROP_S_USEDEFAULTCURSORS
#define DRAGDROP_E_INVALIDHWND
#define DRAGDROP_S_CANCEL
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HANDLE WINAPI GetPropA(_In_ HWND, _In_ LPCSTR)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetCursorPos(_In_ int, _In_ int)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
BOOL WINAPI DestroyWindow(_In_ HWND)
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)