Added code to connect the signals to the target widget.

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

        * native/jni/gtk-peer/GtkDragSourceContextPeer.c:
        Added new static helper function.
      (Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer
        _connectSignals):
        Moved code to connect signals to the helper function.
       (Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_create):
        Removed ptr field and changed to use global gref.
        (connect_signals_for_widget): Implemented new helper.
        (setTarget): Added call to connect_signals_for_widget.


On Fri, 2006-07-28 at 11:53 -0400, Lillian Angel wrote:
> I have implemented more functions/classes for DnD. It is still a work in
> progress and the native code is very much under construction, so please
> don't mind the mess.
> 
> Now, we are able to drag from a source widget and drag to a target. The
> target is now recognized. We cannot drop the widget onto the target just
> yet. 
> 
> 2006-07-28  Lillian Angel  <[EMAIL PROTECTED]>
> 
>         * native/jni/gtk-peer/GtkDragSourceContextPeer.c:
>         Added more static functions to handle widget signals.
>         (create): Initialized the javaObj field.
>         (connectSignals): Added code to connect all signals to
>         the appropriate functions and initialized all java
>         function fields.
>         (drag_begin_cb): New callback, not implemented.
>         (drag_motion_cb): Likewise.
>         (drag_data_get_cb): Likewise.
>         (drag_data_delete_cb): Likewise.
>         (drag_drop_cb): Likewise.
>         (drag_end_cb): Likewise.
>         (drag_data_received_cb): Likewise.
>         (setTarget): New function.
>         (nativeStartDrag): Added code to set the destination and source
>         widgets.
>         * java/awt/dnd/DragSource.java
>         (startDrag): Removed FIXME.
>         * java/awt/dnd/DragGestureRecognizer.java
>         (fireDragGestureRecognized): Reset recognizer when events are 
>       fired.
>         * java/awt/Component.java
>         (setDropTarget): Added code to create the DropTargetContextPeer.
>         * include/GtkDragSourceContextPeer.h: Regenerated.
>         * gnu/java/awt/dnd/peer/gtk/GtkDropTargetPeer.java: Removed 
>       file.
>         * gnu/java/awt/dnd/peer/gtk/GtkDropTargetContextPeer.java
>         (GtkDropTargetContextPeer): Implemented.
>         * gnu/java/awt/dnd/peer/gtk/GtkDragSourceContextPeer.java
>         (GtkDragSourceContextPeer): Added code to set the target.
> 
Index: native/jni/gtk-peer/GtkDragSourceContextPeer.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/GtkDragSourceContextPeer.c,v
retrieving revision 1.2
diff -u -r1.2 GtkDragSourceContextPeer.c
--- native/jni/gtk-peer/GtkDragSourceContextPeer.c	28 Jul 2006 15:52:06 -0000	1.2
+++ native/jni/gtk-peer/GtkDragSourceContextPeer.c	28 Jul 2006 16:41:31 -0000
@@ -42,6 +42,7 @@
 #include <gtk/gtk.h>
 
 static GtkWidget * get_widget (GtkWidget *widget);
+static void connect_signals_for_widget (GtkWidget *widget);
 static void drag_begin_cb (GtkWidget *w, GdkDragContext *dc, gpointer data);
 static gboolean drag_motion_cb (GtkWidget *w, GdkDragContext *dc, 
                                     gint x, gint y, guint t, gpointer data);
@@ -89,21 +90,20 @@
 
 GtkWidget *widget;
 GtkWidget *tgt;
+jobject *gref;
 jobject javaObj;
 
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_create 
   (JNIEnv *env, jobject obj, jobject comp)
 {
-  void *ptr;
-  
   gdk_threads_enter ();
  
   javaObj = obj;
   NSA_SET_GLOBAL_REF (env, obj);  
   NSA_SET_GLOBAL_REF (env, comp);
   
-  ptr = NSA_GET_PTR (env, comp);
+  gref = NSA_GET_PTR (env, comp);
   widget = get_widget (GTK_WIDGET (ptr));
 
   gdk_threads_leave ();
@@ -186,32 +186,15 @@
 Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_connectSignals 
   (JNIEnv *env, jobject obj, jobject comp)
 {
-  jobject *gref;
-  void *ptr;
   jclass gtkdragsourcecontextpeer;
   jclass gtkdroptargetcontextpeer;
   
   gdk_threads_enter ();
 
   javaObj = obj;
-  ptr = NSA_GET_GLOBAL_REF (env, obj);
   gref = NSA_GET_GLOBAL_REF (env, comp);
-
-  g_signal_connect (G_OBJECT (widget), "drag_motion",
-                    G_CALLBACK (drag_motion_cb), *gref);
-  g_signal_connect (G_OBJECT (widget), "drag_data_delete",
-                    G_CALLBACK (drag_data_delete_cb), *gref);
-  g_signal_connect (G_OBJECT (widget), "drag_end",
-                    G_CALLBACK (drag_end_cb), *gref);
-  g_signal_connect (G_OBJECT (widget), "drag_data_get",
-                    G_CALLBACK (drag_data_get_cb), *gref);
-  g_signal_connect (G_OBJECT (widget), "drag_data_received",
-                    G_CALLBACK (drag_data_received_cb), *gref);
-  g_signal_connect (G_OBJECT (widget), "drag_begin",
-                    G_CALLBACK (drag_begin_cb), *gref);  
-  g_signal_connect (G_OBJECT (widget), "drag_drop",
-                    G_CALLBACK (drag_drop_cb), *gref);
-
+  
+  connect_signals_for_widget (widget);
 
   gtkdragsourcecontextpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
                          "gnu/java/awt/dnd/peer/gtk/GtkDragSourceContextPeer");
@@ -258,6 +241,25 @@
   gdk_threads_leave ();
 }
 
+static void
+connect_signals_for_widget (GtkWidget *w)
+{
+  g_signal_connect (G_OBJECT (w), "drag_motion",
+                    G_CALLBACK (drag_motion_cb), *gref);
+  g_signal_connect (G_OBJECT (w), "drag_data_delete",
+                    G_CALLBACK (drag_data_delete_cb), *gref);
+  g_signal_connect (G_OBJECT (w), "drag_end",
+                    G_CALLBACK (drag_end_cb), *gref);
+  g_signal_connect (G_OBJECT (w), "drag_data_get",
+                    G_CALLBACK (drag_data_get_cb), *gref);
+  g_signal_connect (G_OBJECT (w), "drag_data_received",
+                    G_CALLBACK (drag_data_received_cb), *gref);
+  g_signal_connect (G_OBJECT (w), "drag_begin",
+                    G_CALLBACK (drag_begin_cb), *gref);  
+  g_signal_connect (G_OBJECT (w), "drag_drop",
+                    G_CALLBACK (drag_drop_cb), *gref);
+}
+
 static void 
 drag_begin_cb (GtkWidget *w, GdkDragContext *dc, gpointer data)
 {
@@ -318,6 +320,7 @@
   javaObj = obj;
   ptr = NSA_GET_PTR (env, target);
   tgt = get_widget (GTK_WIDGET (ptr));
+  connect_signals_for_widget (tgt);
 
   gdk_threads_leave ();
 }

Reply via email to