Huw Davies : ole32: Don't send DragOver if we're about to drop or cancel.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 23 11:24:21 CST 2016


Module: wine
Branch: master
Commit: 9194c47ede575a56961ad4ac001de175ac32cee1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9194c47ede575a56961ad4ac001de175ac32cee1

Author: Huw Davies <huw at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 );
 }
 




More information about the wine-cvs mailing list