Module: wine Branch: master Commit: 9194c47ede575a56961ad4ac001de175ac32cee1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9194c47ede575a56961ad4ac00...
Author: Huw Davies huw@codeweavers.com Date: Tue Feb 23 10:09:32 2016 +0000
ole32: Don't send DragOver if we're about to drop or cancel.
Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/ole2.c | 47 +++++++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 26 deletions(-)
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c index 07c8e9d..9cffb63 100644 --- a/dlls/ole32/ole2.c +++ b/dlls/ole32/ole2.c @@ -2297,26 +2297,11 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo) trackerInfo->returnValue = IDropSource_QueryContinueDrag(trackerInfo->dropSource, trackerInfo->escPressed, trackerInfo->dwKeyState); - /* - * If we are hovering over the same target as before, send the - * DragOver notification - */ - if ( (trackerInfo->curDragTarget != 0) && - (trackerInfo->curTargetHWND == hwndNewTarget) ) - { - *trackerInfo->pdwEffect = trackerInfo->dwOKEffect; - IDropTarget_DragOver(trackerInfo->curDragTarget, - trackerInfo->dwKeyState, - trackerInfo->curMousePos, - trackerInfo->pdwEffect); - *trackerInfo->pdwEffect &= trackerInfo->dwOKEffect; - } - else + + if (trackerInfo->curTargetHWND != hwndNewTarget && + (trackerInfo->returnValue == S_OK || + trackerInfo->returnValue == DRAGDROP_S_DROP)) { - /* - * If we changed window, we have to notify our old target and check for - * the new one. - */ if (trackerInfo->curDragTarget) { IDropTarget_DragLeave(trackerInfo->curDragTarget); @@ -2327,15 +2312,25 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
if (hwndNewTarget) drag_enter( trackerInfo, hwndNewTarget ); - }
- give_feedback( trackerInfo ); + give_feedback( trackerInfo );
- /* - * All the return valued will stop the operation except the S_OK - * return value. - */ - if (trackerInfo->returnValue != S_OK) + } + + if (trackerInfo->returnValue == S_OK) + { + if (trackerInfo->curDragTarget) + { + *trackerInfo->pdwEffect = trackerInfo->dwOKEffect; + IDropTarget_DragOver(trackerInfo->curDragTarget, + trackerInfo->dwKeyState, + trackerInfo->curMousePos, + trackerInfo->pdwEffect); + *trackerInfo->pdwEffect &= trackerInfo->dwOKEffect; + } + give_feedback( trackerInfo ); + } + else drag_end( trackerInfo ); }