Module: wine Branch: master Commit: 9c44ed8a6bc713d89f88ab20130b807db20639a7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9c44ed8a6bc713d89f88ab2013...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun May 2 12:49:37 2010 +0400
ole32/ole2: After IDropTarget::DragEnter() failure target doesn't count as valid.
---
dlls/ole32/ole2.c | 20 ++++++++++++++------ 1 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c index e21f0ac..b20be1d 100644 --- a/dlls/ole32/ole2.c +++ b/dlls/ole32/ole2.c @@ -2081,13 +2081,21 @@ static void OLEDD_TrackMouseMove(TrackerWindowInfo* trackerInfo) /* * If there is, notify it that we just dragged-in */ - if (trackerInfo->curDragTarget!=0) + if (trackerInfo->curDragTarget) { - IDropTarget_DragEnter(trackerInfo->curDragTarget, - trackerInfo->dataObject, - trackerInfo->dwKeyState, - trackerInfo->curMousePos, - trackerInfo->pdwEffect); + hr = IDropTarget_DragEnter(trackerInfo->curDragTarget, + trackerInfo->dataObject, + trackerInfo->dwKeyState, + trackerInfo->curMousePos, + trackerInfo->pdwEffect); + + /* failed DragEnter() means invalid target */ + if (hr != S_OK) + { + trackerInfo->curDragTargetHWND = 0; + trackerInfo->curTargetHWND = 0; + trackerInfo->curDragTarget = 0; + } } } else