Commit a19fe8d9 authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

winex11.drv: Don't call IDropTarget::{DragOver,DragLeave,Drop} functions if DragEnter fails.

parent 701bb452
......@@ -285,7 +285,7 @@ void X11DRV_XDND_PositionEvent( HWND hWnd, XClientMessageEvent *event )
/* Notify OLE of DragEnter. Result determines if we accept */
HWND dropTargetWindow;
if (XDNDLastDropTargetWnd)
if (XDNDAccepted && XDNDLastDropTargetWnd)
{
dropTarget = get_droptarget_pointer(XDNDLastDropTargetWnd);
if (dropTarget)
......@@ -387,35 +387,38 @@ void X11DRV_XDND_DropEvent( HWND hWnd, XClientMessageEvent *event )
TRACE("\n");
/* Notify OLE of Drop */
dropTarget = get_droptarget_pointer(XDNDLastDropTargetWnd);
if (dropTarget)
if (XDNDAccepted)
{
HRESULT hr;
POINTL pointl;
pointl.x = XDNDxy.x;
pointl.y = XDNDxy.y;
hr = IDropTarget_Drop(dropTarget, &XDNDDataObject, MK_LBUTTON,
pointl, &effect);
if (hr == S_OK)
dropTarget = get_droptarget_pointer(XDNDLastDropTargetWnd);
if (dropTarget)
{
if (effect != DROPEFFECT_NONE)
HRESULT hr;
POINTL pointl;
pointl.x = XDNDxy.x;
pointl.y = XDNDxy.y;
hr = IDropTarget_Drop(dropTarget, &XDNDDataObject, MK_LBUTTON,
pointl, &effect);
if (hr == S_OK)
{
TRACE("drop succeeded\n");
accept = 1;
drop_file = FALSE;
if (effect != DROPEFFECT_NONE)
{
TRACE("drop succeeded\n");
accept = 1;
drop_file = FALSE;
}
else
TRACE("the application refused the drop\n");
}
else if (FAILED(hr))
WARN("drop failed, error 0x%08X\n", hr);
else
TRACE("the application refused the drop\n");
}
else if (FAILED(hr))
WARN("drop failed, error 0x%08X\n", hr);
else
{
WARN("drop returned 0x%08X\n", hr);
drop_file = FALSE;
{
WARN("drop returned 0x%08X\n", hr);
drop_file = FALSE;
}
IDropTarget_Release(dropTarget);
}
IDropTarget_Release(dropTarget);
}
if (drop_file)
......@@ -465,13 +468,16 @@ void X11DRV_XDND_LeaveEvent( HWND hWnd, XClientMessageEvent *event )
TRACE("DND Operation canceled\n");
/* Notify OLE of DragLeave */
dropTarget = get_droptarget_pointer(XDNDLastDropTargetWnd);
if (dropTarget)
if (XDNDAccepted)
{
HRESULT hr = IDropTarget_DragLeave(dropTarget);
if (FAILED(hr))
WARN("IDropTarget_DragLeave failed, error 0x%08X\n", hr);
IDropTarget_Release(dropTarget);
dropTarget = get_droptarget_pointer(XDNDLastDropTargetWnd);
if (dropTarget)
{
HRESULT hr = IDropTarget_DragLeave(dropTarget);
if (FAILED(hr))
WARN("IDropTarget_DragLeave failed, error 0x%08X\n", hr);
IDropTarget_Release(dropTarget);
}
}
X11DRV_XDND_FreeDragDropOp();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment