[PATCH 6/8] ole32: Don't send DragOver if we're about to drop or cancel.

Huw Davies huw at codeweavers.com
Tue Feb 23 04:09:32 CST 2016


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




More information about the wine-patches mailing list