Mikołaj Zalewski : shell32: Improve SHRegisterDragDrop and SHRevokeDragDrop.

Alexandre Julliard julliard at winehq.org
Wed Mar 5 06:24:08 CST 2008


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

Author: Mikołaj Zalewski <mikolaj at zalewski.pl>
Date:   Tue Mar  4 20:26:34 2008 +0100

shell32: Improve SHRegisterDragDrop and SHRevokeDragDrop.

---

 dlls/shell32/shellord.c |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index ed326ea..5d1666b 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -446,9 +446,12 @@ int WINAPIV ShellMessageBoxA(
 /*************************************************************************
  * SHRegisterDragDrop				[SHELL32.86]
  *
- * Probably equivalent to RegisterDragDrop but under Windows 9x it could use the
+ * Probably equivalent to RegisterDragDrop but under Windows 95 it could use the
  * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
- * for details
+ * for details. Under Windows 98 this function initializes the true OLE when called
+ * the first time, on XP always returns E_OUTOFMEMORY and it got removed from Vista.
+ *
+ * We follow Windows 98 behaviour.
  *
  * NOTES
  *     exported by ordinal
@@ -460,16 +463,30 @@ HRESULT WINAPI SHRegisterDragDrop(
 	HWND hWnd,
 	LPDROPTARGET pDropTarget)
 {
-	FIXME("(%p,%p):stub.\n", hWnd, pDropTarget);
+        static BOOL ole_initialized = FALSE;
+        HRESULT hr;
+
+        TRACE("(%p,%p)\n", hWnd, pDropTarget);
+
+        if (!ole_initialized)
+        {
+            hr = OleInitialize(NULL);
+            if (FAILED(hr))
+                return hr;
+            ole_initialized = TRUE;
+        }
 	return RegisterDragDrop(hWnd, pDropTarget);
 }
 
 /*************************************************************************
  * SHRevokeDragDrop				[SHELL32.87]
  *
- * Probably equivalent to RevokeDragDrop but under Windows 9x it could use the
+ * Probably equivalent to RevokeDragDrop but under Windows 95 it could use the
  * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
- * for details
+ * for details. Function removed from Windows Vista.
+ *
+ * We call ole32 RevokeDragDrop which seems to work even if OleInitialize was
+ * not called.
  *
  * NOTES
  *     exported by ordinal
@@ -479,7 +496,7 @@ HRESULT WINAPI SHRegisterDragDrop(
  */
 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
 {
-    FIXME("(%p):stub.\n",hWnd);
+    TRACE("(%p)\n", hWnd);
     return RevokeDragDrop(hWnd);
 }
 




More information about the wine-cvs mailing list