shell32/shellview: Don't crash on ::DragLeave called without droptraget.

This commit is contained in:
Nikolay Sivov 2010-03-11 17:39:48 +03:00 committed by Alexandre Julliard
parent 78c909fb08
commit 345ab7d591
2 changed files with 23 additions and 7 deletions

View File

@ -2407,15 +2407,23 @@ static HRESULT WINAPI ISVDropTarget_DragOver(IDropTarget *iface, DWORD grfKeySta
return drag_notify_subitem(This, grfKeyState, pt, pdwEffect);
}
static HRESULT WINAPI ISVDropTarget_DragLeave(IDropTarget *iface) {
static HRESULT WINAPI ISVDropTarget_DragLeave(IDropTarget *iface)
{
IShellViewImpl *This = impl_from_IDropTarget(iface);
if (This->pCurDropTarget)
{
IDropTarget_DragLeave(This->pCurDropTarget);
IDropTarget_Release(This->pCurDropTarget);
This->pCurDropTarget = NULL;
}
if (This->pCurDataObject)
{
IDataObject_Release(This->pCurDataObject);
This->pCurDataObject = NULL;
This->pCurDropTarget = NULL;
}
This->iDragOverItem = 0;
return S_OK;

View File

@ -318,6 +318,7 @@ static void test_IShellView_CreateViewWindow(void)
IShellFolder *desktop;
FOLDERSETTINGS settings;
IShellView *view;
IDropTarget *dt;
HWND hwnd_view;
HRESULT hr;
RECT r = {0};
@ -346,6 +347,13 @@ if (0)
ok(hr == E_UNEXPECTED, "got (0x%08x)\n", hr);
ok(hwnd_view == 0, "got %p\n", hwnd_view);
/* ::DragLeave without drag operation */
hr = IShellView_QueryInterface(view, &IID_IDropTarget, (void**)&dt);
ok(hr == S_OK, "got (0x%08x)\n", hr);
hr = IDropTarget_DragLeave(dt);
ok(hr == S_OK, "got (0x%08x)\n", hr);
IDropTarget_Release(dt);
IShellView_Release(view);
IShellFolder_Release(desktop);
}