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 ();
}