[PATCH 4/8] ole32: Move DragEnter handling to a separate function.
Huw Davies
huw at codeweavers.com
Tue Feb 23 04:09:30 CST 2016
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/ole32/ole2.c | 77 ++++++++++++++++++++++---------------------------------
1 file changed, 31 insertions(+), 46 deletions(-)
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 39cb57b..fdfe16f 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -2182,6 +2182,35 @@ static LRESULT WINAPI OLEDD_DragTrackerWindowProc(
return DefWindowProcW (hwnd, uMsg, wParam, lParam);
}
+static void drag_enter( TrackerWindowInfo *info, HWND new_target )
+{
+ HRESULT hr;
+
+ info->curTargetHWND = new_target;
+
+ while (new_target && !is_droptarget( new_target ))
+ new_target = GetParent( new_target );
+
+ info->curDragTarget = get_droptarget_pointer( new_target );
+
+ if (info->curDragTarget)
+ {
+ *info->pdwEffect = info->dwOKEffect;
+ hr = IDropTarget_DragEnter( info->curDragTarget, info->dataObject,
+ info->dwKeyState, info->curMousePos,
+ info->pdwEffect );
+ *info->pdwEffect &= info->dwOKEffect;
+
+ /* failed DragEnter() means invalid target */
+ if (hr != S_OK)
+ {
+ IDropTarget_Release( info->curDragTarget );
+ info->curDragTarget = NULL;
+ info->curTargetHWND = NULL;
+ }
+ }
+}
+
static HRESULT give_feedback( TrackerWindowInfo *info )
{
HRESULT hr;
@@ -2237,13 +2266,6 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
trackerInfo->returnValue = IDropSource_QueryContinueDrag(trackerInfo->dropSource,
trackerInfo->escPressed,
trackerInfo->dwKeyState);
-
- /*
- * Every time, we re-initialize the effects passed to the
- * IDropTarget to the effects allowed by the source.
- */
- *trackerInfo->pdwEffect = trackerInfo->dwOKEffect;
-
/*
* If we are hovering over the same target as before, send the
* DragOver notification
@@ -2251,6 +2273,7 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
if ( (trackerInfo->curDragTarget != 0) &&
(trackerInfo->curTargetHWND == hwndNewTarget) )
{
+ *trackerInfo->pdwEffect = trackerInfo->dwOKEffect;
IDropTarget_DragOver(trackerInfo->curDragTarget,
trackerInfo->dwKeyState,
trackerInfo->curMousePos,
@@ -2271,46 +2294,8 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
trackerInfo->curTargetHWND = NULL;
}
- /*
- * Make sure we're hovering over a window.
- */
if (hwndNewTarget)
- {
- /*
- * Find-out if there is a drag target under the mouse
- */
- HWND next_target_wnd = hwndNewTarget;
-
- trackerInfo->curTargetHWND = hwndNewTarget;
-
- while (next_target_wnd && !is_droptarget(next_target_wnd))
- next_target_wnd = GetParent(next_target_wnd);
-
- if (next_target_wnd) hwndNewTarget = next_target_wnd;
-
- trackerInfo->curDragTarget = get_droptarget_pointer(hwndNewTarget);
-
- /*
- * If there is, notify it that we just dragged-in
- */
- if (trackerInfo->curDragTarget)
- {
- hr = IDropTarget_DragEnter(trackerInfo->curDragTarget,
- trackerInfo->dataObject,
- trackerInfo->dwKeyState,
- trackerInfo->curMousePos,
- trackerInfo->pdwEffect);
- *trackerInfo->pdwEffect &= trackerInfo->dwOKEffect;
-
- /* failed DragEnter() means invalid target */
- if (hr != S_OK)
- {
- trackerInfo->curTargetHWND = 0;
- IDropTarget_Release(trackerInfo->curDragTarget);
- trackerInfo->curDragTarget = 0;
- }
- }
- }
+ drag_enter( trackerInfo, hwndNewTarget );
}
give_feedback( trackerInfo );
--
2.7.0
More information about the wine-patches
mailing list