summaryrefslogtreecommitdiff
path: root/native/jni/gtk-peer/GtkDragSourceContextPeer.c
diff options
context:
space:
mode:
Diffstat (limited to 'native/jni/gtk-peer/GtkDragSourceContextPeer.c')
-rw-r--r--native/jni/gtk-peer/GtkDragSourceContextPeer.c132
1 files changed, 103 insertions, 29 deletions
diff --git a/native/jni/gtk-peer/GtkDragSourceContextPeer.c b/native/jni/gtk-peer/GtkDragSourceContextPeer.c
index 6dfbfcce4..62ffa1395 100644
--- a/native/jni/gtk-peer/GtkDragSourceContextPeer.c
+++ b/native/jni/gtk-peer/GtkDragSourceContextPeer.c
@@ -42,7 +42,8 @@ exception statement from your version. */
#include <gtk/gtk.h>
static GtkWidget * get_widget (GtkWidget *widget);
-
+static void connect_signals_for_widget (GtkWidget *widget);
+
#define ACTION_COPY 1
#define ACTION_MOVE 2
#define ACTION_COPY_OR_MOVE 3
@@ -63,21 +64,35 @@ static GtkWidget * get_widget (GtkWidget *widget);
#define AWT_HAND_CURSOR 12
#define AWT_MOVE_CURSOR 13
+static jmethodID dragEnterID;
+static jmethodID dragExitID;
+static jmethodID dragDropEndID;
+static jmethodID dragMouseMovedID;
+static jmethodID dragOverID;
+static jmethodID dragActionChangedID;
+static jmethodID acceptDragID;
+static jmethodID rejectDragID;
+static jmethodID acceptDropID;
+static jmethodID rejectDropID;
+static jmethodID dropCompleteID;
+
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);
- widget = get_widget (GTK_WIDGET (ptr));
+ gref = NSA_GET_PTR (env, comp);
+ widget = get_widget (GTK_WIDGET (gref));
gdk_threads_leave ();
}
@@ -93,6 +108,7 @@ Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_nativeSetCursor
gdk_threads_enter ();
+ javaObj = obj;
ptr = NSA_GET_GLOBAL_REF (env, obj);
switch (type)
@@ -158,31 +174,81 @@ JNIEXPORT void JNICALL
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 ();
- ptr = NSA_GET_GLOBAL_REF (env, obj);
+ javaObj = obj;
gref = NSA_GET_GLOBAL_REF (env, comp);
+
+ connect_signals_for_widget (widget);
+
+ gtkdragsourcecontextpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/dnd/peer/gtk/GtkDragSourceContextPeer");
+
+ dragEnterID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdragsourcecontextpeer,
+ "dragEnter", "(II)V");
+ dragExitID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdragsourcecontextpeer,
+ "dragExit", "(III)V");
+ dragDropEndID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdragsourcecontextpeer,
+ "dragDropEnd", "(IZII)V");
+ dragMouseMovedID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdragsourcecontextpeer,
+ "dragMouseMoved", "(II)V");
+ dragOverID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdragsourcecontextpeer,
+ "dragOver", "(II)V");
+ dragActionChangedID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdragsourcecontextpeer,
+ "dragActionChanged", "(II)V");
+
+
+ gtkdroptargetcontextpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
+ "gnu/java/awt/dnd/peer/gtk/GtkDropTargetContextPeer");
+
+ acceptDragID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdroptargetcontextpeer,
+ "acceptDrag", "(I)V");
+ rejectDragID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdroptargetcontextpeer,
+ "rejectDrag", "()V");
+ acceptDropID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdroptargetcontextpeer,
+ "acceptDrop", "(I)V");
+ rejectDropID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdroptargetcontextpeer,
+ "rejectDrop", "()V");
+ dropCompleteID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+ gtkdroptargetcontextpeer,
+ "dropComplete", "(Z)V");
+
+ gdk_threads_leave ();
+}
+
+static void
+connect_signals_for_widget (GtkWidget *w)
+{
+ /* FIXME: Not implemented. */
+ w = NULL;
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_setTarget
+ (JNIEnv *env, jobject obj, jobject target)
+{
+ void *ptr;
+
+ gdk_threads_enter ();
+
+ javaObj = obj;
+ ptr = NSA_GET_PTR (env, target);
+ tgt = get_widget (GTK_WIDGET (ptr));
+ connect_signals_for_widget (tgt);
- /* Uncomment when needed:
- g_signal_connect (G_OBJECT (widget), "drag_motion",
- G_CALLBACK (drag_motion_cb), *gref);
- g_signal_connect (G_OBJECT (widget), "drag_begin",
- G_CALLBACK (drag_begin_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_drop",
- G_CALLBACK (drag_drop_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_data_received",
- G_CALLBACK (drag_data_received_cb), *gref);
- */
-
gdk_threads_leave ();
}
@@ -200,7 +266,8 @@ Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_nativeStartDrag
GdkDragAction action = GDK_ACTION_DEFAULT;
gdk_threads_enter ();
-
+
+ javaObj = obj;
ptr = NSA_GET_GLOBAL_REF (env, obj);
data = (*env)->GetStringUTFChars (env, target, NULL);
@@ -225,7 +292,9 @@ Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_nativeStartDrag
action = GDK_ACTION_DEFAULT;
}
- gtk_drag_highlight (widget);
+ gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_ALL, tar,
+ sizeof (tar) / sizeof (GtkTargetEntry),
+ action);
context = gtk_drag_begin (widget,
gtk_target_list_new (tar, sizeof (tar) / sizeof (GtkTargetEntry)),
action, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, event);
@@ -235,6 +304,11 @@ Java_gnu_java_awt_dnd_peer_gtk_GtkDragSourceContextPeer_nativeStartDrag
image = cp_gtk_image_get_pixbuf (env, img);
gtk_drag_set_icon_pixbuf (context, image, x, y);
}
+
+ if (tgt != NULL)
+ gtk_drag_dest_set (tgt, GTK_DEST_DEFAULT_ALL, tar,
+ sizeof (tar) / sizeof (GtkTargetEntry),
+ action);
gdk_event_free (event);
(*env)->ReleaseStringUTFChars (env, target, data);