After reading some articles on DnD, I figured out how to implement
startDrag. I added a bunch of comments (and a referring URL) into the
function.


2006-07-06  Lillian Angel  <[EMAIL PROTECTED]>

        * java/awt/dnd/DragSource.java
        (startDrag): Implemented. Added comments describing
        what the function should do. Removed FIXME.

Index: java/awt/dnd/DragSource.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/awt/dnd/DragSource.java,v
retrieving revision 1.7
diff -u -r1.7 DragSource.java
--- java/awt/dnd/DragSource.java	5 Jul 2006 17:45:50 -0000	1.7
+++ java/awt/dnd/DragSource.java	6 Jul 2006 17:34:03 -0000
@@ -127,9 +127,39 @@
                         Image dragImage, Point imageOffset,
                         Transferable trans, DragSourceListener dsl,
                         FlavorMap map)
-    throws NotImplementedException
   {
-    // FIXME: Implement this
+    // http://www.javaworld.com/javaworld/jw-03-1999/jw-03-dragndrop.html
+
+    // This function creates a DragSourceContext object. This object tracks the
+    // state of the operation by listening to a native peer. In this situation,
+    // the DragSource may be obtained from the event or by an instance variable.
+    // This function also creates a new DragSourceContextPeer.
+
+    // This function sends the same message to the context, which then forwards
+    // it to the peer, passing itself as a parameter. Now, the native system has
+    // access to the Transferable through the context.
+
+    try
+      {
+        flavorMap = map;
+        DragSourceContextPeer peer = Toolkit.getDefaultToolkit().
+                                          createDragSourceContextPeer(trigger);
+        DragSourceContext context = createDragSourceContext(peer, trigger,
+                                                            dragCursor,
+                                                            dragImage,
+                                                            imageOffset, trans,
+                                                            dsl);
+
+        if (peer == null)
+          throw new InvalidDnDOperationException();
+
+        peer.startDrag(context, dragCursor, dragImage, imageOffset);
+      }
+    catch (Exception e)
+      {
+        throw new InvalidDnDOperationException("Drag and Drop system is "
+                                + "unable to initiate a drag operation.");
+      }
   }
 
   /**

Reply via email to