4 * Copyright 1997 Marcus Meissner
5 * Copyright 1998, 1999, 2002 Juergen Schmied
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
38 #include "wine/debug.h"
41 WINE_DEFAULT_DEBUG_CHANNEL (shell
);
43 /***********************************************************************
44 * IDropTargetHelper implementation
49 IDropTargetHelper IDropTargetHelper_iface
;
50 IDragSourceHelper2 IDragSourceHelper2_iface
;
54 static inline dragdrophelper
*impl_from_IDropTargetHelper(IDropTargetHelper
*iface
)
56 return CONTAINING_RECORD(iface
, dragdrophelper
, IDropTargetHelper_iface
);
59 static inline dragdrophelper
*impl_from_IDragSourceHelper2(IDragSourceHelper2
*iface
)
61 return CONTAINING_RECORD(iface
, dragdrophelper
, IDragSourceHelper2_iface
);
64 /**************************************************************************
65 * IDropTargetHelper_fnQueryInterface
67 static HRESULT WINAPI
IDropTargetHelper_fnQueryInterface (IDropTargetHelper
* iface
, REFIID riid
, LPVOID
* ppvObj
)
69 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
71 TRACE ("(%p)->(%s,%p)\n", This
, shdebugstr_guid (riid
), ppvObj
);
75 if (IsEqualIID (riid
, &IID_IUnknown
) || IsEqualIID (riid
, &IID_IDropTargetHelper
))
77 *ppvObj
= &This
->IDropTargetHelper_iface
;
79 else if (IsEqualIID (riid
, &IID_IDragSourceHelper
) || IsEqualIID (riid
, &IID_IDragSourceHelper2
))
81 *ppvObj
= &This
->IDragSourceHelper2_iface
;
85 IUnknown_AddRef ((IUnknown
*) (*ppvObj
));
86 TRACE ("-- Interface: (%p)->(%p)\n", ppvObj
, *ppvObj
);
89 FIXME ("%s: E_NOINTERFACE\n", shdebugstr_guid (riid
));
93 static ULONG WINAPI
IDropTargetHelper_fnAddRef (IDropTargetHelper
* iface
)
95 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
96 ULONG refCount
= InterlockedIncrement(&This
->ref
);
98 TRACE ("(%p)->(count=%lu)\n", This
, refCount
- 1);
103 static ULONG WINAPI
IDropTargetHelper_fnRelease (IDropTargetHelper
* iface
)
105 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
106 ULONG refCount
= InterlockedDecrement(&This
->ref
);
108 TRACE ("(%p)->(count=%lu)\n", This
, refCount
+ 1);
111 TRACE ("-- destroying (%p)\n", This
);
118 static HRESULT WINAPI
IDropTargetHelper_fnDragEnter (
119 IDropTargetHelper
* iface
,
121 IDataObject
* pDataObject
,
125 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
126 FIXME ("(%p)->(%p %p %p 0x%08lx)\n", This
,hwndTarget
, pDataObject
, ppt
, dwEffect
);
130 static HRESULT WINAPI
IDropTargetHelper_fnDragLeave (IDropTargetHelper
* iface
)
132 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
133 FIXME ("(%p)->()\n", This
);
137 static HRESULT WINAPI
IDropTargetHelper_fnDragOver (IDropTargetHelper
* iface
, POINT
* ppt
, DWORD dwEffect
)
139 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
140 FIXME ("(%p)->(%p 0x%08lx)\n", This
, ppt
, dwEffect
);
144 static HRESULT WINAPI
IDropTargetHelper_fnDrop (IDropTargetHelper
* iface
, IDataObject
* pDataObject
, POINT
* ppt
, DWORD dwEffect
)
146 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
147 FIXME ("(%p)->(%p %p 0x%08lx)\n", This
, pDataObject
, ppt
, dwEffect
);
151 static HRESULT WINAPI
IDropTargetHelper_fnShow (IDropTargetHelper
* iface
, BOOL fShow
)
153 dragdrophelper
*This
= impl_from_IDropTargetHelper(iface
);
154 FIXME ("(%p)->(%u)\n", This
, fShow
);
158 static const IDropTargetHelperVtbl DropTargetHelperVtbl
=
160 IDropTargetHelper_fnQueryInterface
,
161 IDropTargetHelper_fnAddRef
,
162 IDropTargetHelper_fnRelease
,
163 IDropTargetHelper_fnDragEnter
,
164 IDropTargetHelper_fnDragLeave
,
165 IDropTargetHelper_fnDragOver
,
166 IDropTargetHelper_fnDrop
,
167 IDropTargetHelper_fnShow
170 static HRESULT WINAPI
DragSourceHelper2_QueryInterface (IDragSourceHelper2
* iface
, REFIID riid
, LPVOID
* ppv
)
172 dragdrophelper
*This
= impl_from_IDragSourceHelper2(iface
);
173 return IDropTargetHelper_fnQueryInterface(&This
->IDropTargetHelper_iface
, riid
, ppv
);
176 static ULONG WINAPI
DragSourceHelper2_AddRef (IDragSourceHelper2
* iface
)
178 dragdrophelper
*This
= impl_from_IDragSourceHelper2(iface
);
179 return IDropTargetHelper_fnAddRef(&This
->IDropTargetHelper_iface
);
182 static ULONG WINAPI
DragSourceHelper2_Release (IDragSourceHelper2
* iface
)
184 dragdrophelper
*This
= impl_from_IDragSourceHelper2(iface
);
185 return IDropTargetHelper_fnRelease(&This
->IDropTargetHelper_iface
);
188 static HRESULT WINAPI
DragSourceHelper2_InitializeFromBitmap(IDragSourceHelper2
*iface
,
189 SHDRAGIMAGE
*dragimage
, IDataObject
*object
)
191 dragdrophelper
*This
= impl_from_IDragSourceHelper2(iface
);
193 FIXME("(%p)->(%p, %p): stub\n", This
, dragimage
, object
);
198 static HRESULT WINAPI
DragSourceHelper2_InitializeFromWindow(IDragSourceHelper2
*iface
, HWND hwnd
,
199 POINT
*pt
, IDataObject
*object
)
201 dragdrophelper
*This
= impl_from_IDragSourceHelper2(iface
);
203 FIXME("(%p)->(%p, %s, %p): stub\n", This
, hwnd
, wine_dbgstr_point(pt
), object
);
208 static HRESULT WINAPI
DragSourceHelper2_SetFlags(IDragSourceHelper2
*iface
, DWORD flags
)
210 dragdrophelper
*This
= impl_from_IDragSourceHelper2(iface
);
212 FIXME("(%p)->(%08lx): stub\n", This
, flags
);
217 static const IDragSourceHelper2Vtbl DragSourceHelper2Vtbl
=
219 DragSourceHelper2_QueryInterface
,
220 DragSourceHelper2_AddRef
,
221 DragSourceHelper2_Release
,
222 DragSourceHelper2_InitializeFromBitmap
,
223 DragSourceHelper2_InitializeFromWindow
,
224 DragSourceHelper2_SetFlags
227 /**************************************************************************
228 * IDropTargetHelper_Constructor
230 HRESULT WINAPI
IDropTargetHelper_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
235 TRACE ("outer=%p %s %p\n", pUnkOuter
, shdebugstr_guid (riid
), ppv
);
240 return CLASS_E_NOAGGREGATION
;
242 dth
= LocalAlloc (LMEM_ZEROINIT
, sizeof (dragdrophelper
));
243 if (!dth
) return E_OUTOFMEMORY
;
245 dth
->IDropTargetHelper_iface
.lpVtbl
= &DropTargetHelperVtbl
;
246 dth
->IDragSourceHelper2_iface
.lpVtbl
= &DragSourceHelper2Vtbl
;
249 hr
= IDropTargetHelper_QueryInterface (&dth
->IDropTargetHelper_iface
, riid
, ppv
);
250 IDropTargetHelper_Release (&dth
->IDropTargetHelper_iface
);