diff options
Diffstat (limited to 'libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c')
-rw-r--r-- | libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index d71f36a4298..022677b06a9 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -37,6 +37,7 @@ exception statement from your version. */ #include "gtkpeer.h" +#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" #include "gnu_java_awt_peer_gtk_GtkWindowPeer.h" #include "gnu_java_awt_peer_gtk_GtkFramePeer.h" #include <gdk/gdkprivate.h> @@ -73,7 +74,11 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create void *window_parent; GtkWidget *vbox, *layout; + /* Create global reference and save it for future use */ + NSA_SET_GLOBAL_REF (env, obj); + gdk_threads_enter (); + window_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = GTK_WINDOW (window_widget); @@ -116,7 +121,8 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create NSA_SET_PTR (env, obj, window_widget); } -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible (JNIEnv *env, jobject obj, jboolean visible) { void *ptr; @@ -135,7 +141,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible gdk_threads_leave (); } -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectJObject (JNIEnv *env, jobject obj) { void *ptr; @@ -169,26 +176,44 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window); + gdk_threads_leave (); +} + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals + (JNIEnv *env, jobject obj) +{ + void *ptr = NSA_GET_PTR (env, obj); + jobject *gref = NSA_GET_GLOBAL_REF (env, obj); + g_assert (gref); + + gdk_threads_enter (); + + gtk_widget_realize (ptr); + /* Connect signals for window event support. */ g_signal_connect (G_OBJECT (ptr), "delete-event", - G_CALLBACK (window_delete_cb), obj); + G_CALLBACK (window_delete_cb), *gref); g_signal_connect (G_OBJECT (ptr), "destroy-event", - G_CALLBACK (window_destroy_cb), obj); + G_CALLBACK (window_destroy_cb), *gref); g_signal_connect (G_OBJECT (ptr), "show", - G_CALLBACK (window_show_cb), obj); + G_CALLBACK (window_show_cb), *gref); g_signal_connect (G_OBJECT (ptr), "focus-in-event", - G_CALLBACK (window_focus_in_cb), obj); + G_CALLBACK (window_focus_in_cb), *gref); g_signal_connect (G_OBJECT (ptr), "focus-out-event", - G_CALLBACK (window_focus_out_cb), obj); + G_CALLBACK (window_focus_out_cb), *gref); g_signal_connect (G_OBJECT (ptr), "window-state-event", - G_CALLBACK (window_window_state_cb), obj); + G_CALLBACK (window_window_state_cb), *gref); gdk_threads_leave (); + + /* Connect the superclass signals. */ + Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj); } /* |