[PATCH 2/8] ole32: Move the GiveFeedback handling to a separate function.

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


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/ole32/ole2.c      | 73 +++++++++++++++++++++-----------------------------
 dlls/ole32/ole32res.rc | 10 ++++---
 dlls/ole32/olestd.h    |  5 ++++
 3 files changed, 42 insertions(+), 46 deletions(-)

diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 3740968..315f403 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -46,6 +46,7 @@
 
 #include "wine/unicode.h"
 #include "compobj_private.h"
+#include "olestd.h"
 #include "wine/list.h"
 
 #include "wine/debug.h"
@@ -2181,6 +2182,35 @@ static LRESULT WINAPI OLEDD_DragTrackerWindowProc(
   return DefWindowProcW (hwnd, uMsg, wParam, lParam);
 }
 
+static HRESULT give_feedback( TrackerWindowInfo *info )
+{
+    HRESULT hr;
+    int res;
+    HCURSOR cur;
+
+    if (info->curDragTarget == NULL)
+        *info->pdwEffect = DROPEFFECT_NONE;
+
+    hr = IDropSource_GiveFeedback( info->dropSource, *info->pdwEffect );
+
+    if (hr == DRAGDROP_S_USEDEFAULTCURSORS)
+    {
+        if (*info->pdwEffect & DROPEFFECT_MOVE)
+            res = CURSOR_MOVE;
+        else if (*info->pdwEffect & DROPEFFECT_COPY)
+            res = CURSOR_COPY;
+        else if (*info->pdwEffect & DROPEFFECT_LINK)
+            res = CURSOR_LINK;
+        else
+            res = CURSOR_NODROP;
+
+        cur = LoadCursorW( hProxyDll, MAKEINTRESOURCEW( res ) );
+        SetCursor( cur );
+    }
+
+    return hr;
+}
+
 /***
  * OLEDD_TrackStateChange()
  *
@@ -2288,48 +2318,7 @@ static void OLEDD_TrackStateChange(TrackerWindowInfo* trackerInfo)
     }
   }
 
-  /*
-   * Now that we have done that, we have to tell the source to give
-   * us feedback on the work being done by the target.  If we don't
-   * have a target, simulate no effect.
-   */
-  if (trackerInfo->curDragTarget==0)
-  {
-    *trackerInfo->pdwEffect = DROPEFFECT_NONE;
-  }
-
-  hr = IDropSource_GiveFeedback(trackerInfo->dropSource,
-  				*trackerInfo->pdwEffect);
-
-  /*
-   * When we ask for feedback from the drop source, sometimes it will
-   * do all the necessary work and sometimes it will not handle it
-   * when that's the case, we must display the standard drag and drop
-   * cursors.
-   */
-  if (hr == DRAGDROP_S_USEDEFAULTCURSORS)
-  {
-    HCURSOR hCur;
-
-    if (*trackerInfo->pdwEffect & DROPEFFECT_MOVE)
-    {
-      hCur = LoadCursorW(hProxyDll, MAKEINTRESOURCEW(2));
-    }
-    else if (*trackerInfo->pdwEffect & DROPEFFECT_COPY)
-    {
-      hCur = LoadCursorW(hProxyDll, MAKEINTRESOURCEW(3));
-    }
-    else if (*trackerInfo->pdwEffect & DROPEFFECT_LINK)
-    {
-      hCur = LoadCursorW(hProxyDll, MAKEINTRESOURCEW(4));
-    }
-    else
-    {
-      hCur = LoadCursorW(hProxyDll, MAKEINTRESOURCEW(1));
-    }
-
-    SetCursor(hCur);
-  }
+  give_feedback( trackerInfo );
 
   /*
    * All the return valued will stop the operation except the S_OK
diff --git a/dlls/ole32/ole32res.rc b/dlls/ole32/ole32res.rc
index 11b255a..5190ba6 100644
--- a/dlls/ole32/ole32res.rc
+++ b/dlls/ole32/ole32res.rc
@@ -23,6 +23,8 @@
 #include "winuser.h"
 #include "winnls.h"
 
+#include "olestd.h"
+
 #define WINE_FILENAME_STR "ole32.dll"
 #define WINE_EXTRAVALUES VALUE "OLESelfRegister",""
 
@@ -37,13 +39,13 @@
 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 
 /* @makedep: nodrop.cur */
-1 CURSOR nodrop.cur
+CURSOR_NODROP CURSOR nodrop.cur
 
 /* @makedep: drag_move.cur */
-2 CURSOR drag_move.cur
+CURSOR_MOVE CURSOR drag_move.cur
 
 /* @makedep: drag_copy.cur */
-3 CURSOR drag_copy.cur
+CURSOR_COPY CURSOR drag_copy.cur
 
 /* @makedep: drag_link.cur */
-4 CURSOR drag_link.cur
+CURSOR_LINK CURSOR drag_link.cur
diff --git a/dlls/ole32/olestd.h b/dlls/ole32/olestd.h
index fbc4442..33063c7 100644
--- a/dlls/ole32/olestd.h
+++ b/dlls/ole32/olestd.h
@@ -49,4 +49,9 @@
 #define OleStdCopyMetafilePict(hpictin, phpictout)  \
    (*(phpictout) = OleDuplicateData(hpictin,CF_METAFILEPICT,GHND|GMEM_SHARE))
 
+#define CURSOR_NODROP 1
+#define CURSOR_MOVE   2
+#define CURSOR_COPY   3
+#define CURSOR_LINK   4
+
 #endif /* __WINE_OLESTD_H_ */
-- 
2.7.0




More information about the wine-patches mailing list