diff --git a/dlls/winex11.drv/xdnd.c b/dlls/winex11.drv/xdnd.c index 59c1671771c..01af480c67c 100644 --- a/dlls/winex11.drv/xdnd.c +++ b/dlls/winex11.drv/xdnd.c @@ -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; + 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 + { + WARN("drop returned 0x%08X\n", hr); drop_file = FALSE; } - else - TRACE("the application refused the drop\n"); + IDropTarget_Release(dropTarget); } - else if (FAILED(hr)) - WARN("drop failed, error 0x%08X\n", hr); - else - { - WARN("drop returned 0x%08X\n", hr); - drop_file = FALSE; - } - 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();