2007-11-13 Everaldo Canuto <ecanuto@novell.com>
authorEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Tue, 13 Nov 2007 14:29:45 +0000 (14:29 -0000)
committerEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Tue, 13 Nov 2007 14:29:45 +0000 (14:29 -0000)
* Win32DnD.cs: Implement Win32 Drop files, thank you Srikanth Madikeri for
the patch. [Fixes #324856]

svn path=/trunk/mcs/; revision=89559

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Win32DnD.cs

index 4df47fea54888b785cfc00ac14d6ab2101c9eed1..3d705d83ca9c39db51b27527f273996cd9c4187e 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-13  Everaldo Canuto  <ecanuto@novell.com>
+
+       * Win32DnD.cs: Implement Win32 Drop files, thank you Srikanth Madikeri for
+       the patch. [Fixes #324856]
+
 2007-11-12  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * ListView.cs:
index 61ec117c766cebb47f35d2f599ae21cde800ec32..e1397961036fa4363864fb970e3c608f373538fb 100644 (file)
@@ -21,8 +21,8 @@
 //
 // Authors:
 //     Peter Bartok    (pbartok@novell.com)
-//
-//
+//     Srikanth Madikeri       (csri_1986@yahoo.com) - Win32 Drop files.
+// 
 
 // NOT COMPLETE
 
@@ -788,41 +788,27 @@ namespace System.Windows.Forms {
                                return S_OK;
                        }
 
-                       internal static uint Drop(IntPtr @this, IntPtr pDataObj, uint grfkeyState, IntPtr pt_x, IntPtr pt_y, IntPtr pdwEffect) {
-                               throw new Exception("Yeah baby, gimme a ride to WM_DROPFILES land");
-
-                               #if InTheFuture
-                               ComIDataObjectUnmanaged data_object;
-                               FORMATETC               format;
-                               STGMEDIUM               medium;
-                               uint                    result;
-                               IntPtr                  mem;
-
-
-                               data_object = new ComIDataObjectUnmanaged(pDataObj);
-
-                               format = new FORMATETC();
-                               format.cfFormat = ClipboardFormats.CF_HDROP;
-                               format.ptd = IntPtr.Zero;
-                               format.dwAspect = DVASPECT.DVASPECT_CONTENT;
-                               format.lindex = -1;
-                               format.tymed = TYMED.TYMED_HGLOBAL;
-
-                               medium = new STGMEDIUM();
-                               medium.tymed = TYMED.TYMED_HGLOBAL;
-
-                               //mem = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
-                               //result = data_object.QueryInterface(IID_IDataObject, mem);
-                               //Marshal.FreeHGlobal(mem);
-
-                               //result = data_object.AddRef();
+                       internal static uint Drop(IntPtr @this, IntPtr pDataObj, uint grfkeyState, IntPtr pt_x, IntPtr pt_y, IntPtr pdwEffect)
+                       {
+                               IntPtr window;
+                               
+                               window = Marshal.ReadIntPtr (@this, Marshal.SizeOf (typeof (IntPtr)));
 
-                               result = data_object.QueryGetData(format);
+                               DragDropEventArgs.x = pt_x.ToInt32 ();
+                               DragDropEventArgs.y = pt_y.ToInt32 ();
+                               DragDropEventArgs.allowed_effect = (DragDropEffects) Marshal.ReadIntPtr (pdwEffect).ToInt32();
+                               DragDropEventArgs.current_effect = DragDropEventArgs.AllowedEffect;
+                               DragDropEventArgs.keystate = (int) grfkeyState;
 
-                               result = data_object.GetData(format, ref medium);
+                               Control control = Control.FromHandle (window);
+                               if (control == null) {
+                                       control.DndDrop (DragDropEventArgs);
+                                       return S_FALSE;
+                               }
+                               Marshal.WriteInt32 (pdwEffect, (int) DragDropEventArgs.Effect);
 
-                               return E_NOTIMPL;
-                               #endif
+                               return S_OK;
                        }
                }