diff options
author | Thomas Fitzsimmons <fitzsim@redhat.com> | 2005-07-11 23:27:42 +0000 |
---|---|---|
committer | Thomas Fitzsimmons <fitzsim@redhat.com> | 2005-07-11 23:27:42 +0000 |
commit | 956afe1a2245446fad3bd3d0acb3867311f45d13 (patch) | |
tree | 51e80bbe33268adda56d11610be88fcaea567772 /native/jni | |
parent | 4da31b209a0fe4372bcc99cc3d3951223f98d3d6 (diff) | |
download | classpath-956afe1a2245446fad3bd3d0acb3867311f45d13.tar.gz |
2005-07-11 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkChoicePeer.java (connectSignals): New method.
* include/gnu_java_awt_peer_gtk_GtkChoicePeer.h: Regenerate.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Move
gdk_threads_enter calls to start of method bodies. Move
gdk_threads_leave calls to end of method definitions bodies.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Likewise.
Diffstat (limited to 'native/jni')
30 files changed, 1122 insertions, 658 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c index 55a20e8bb..ba5c23a0c 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c @@ -75,11 +75,14 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_initState (JNIEnv *env, jobject self) { struct peerfont *pfont = NULL; + gdk_threads_enter (); + g_assert (self != NULL); pfont = (struct peerfont *) g_malloc0 (sizeof (struct peerfont)); g_assert (pfont != NULL); NSA_SET_FONT_PTR (env, self, pfont); + gdk_threads_leave (); } @@ -91,6 +94,7 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_dispose struct peerfont *pfont = NULL; gdk_threads_enter (); + pfont = (struct peerfont *)NSA_DEL_FONT_PTR (env, self); g_assert (pfont != NULL); if (pfont->layout != NULL) @@ -102,6 +106,7 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_dispose if (pfont->desc != NULL) pango_font_description_free (pfont->desc); g_free (pfont); + gdk_threads_leave (); } @@ -114,11 +119,13 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector jobject fontRenderContext) { struct peerfont *pfont = NULL; - GList *items = NULL, *i = NULL; + GList *items = NULL; + GList *i = NULL; gchar *str = NULL; - int len, j; - double *native_extents; - int *native_codes; + int len = 0; + int j = 0; + double *native_extents = NULL; + int *native_codes = NULL; jintArray java_codes = NULL; jdoubleArray java_extents = NULL; @@ -227,7 +234,7 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics { struct peerfont *pfont = NULL; jdouble *native_metrics = NULL; - PangoFontMetrics *pango_metrics; + PangoFontMetrics *pango_metrics = NULL; gdk_threads_enter(); @@ -329,9 +336,10 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont struct peerfont *pfont = NULL; char const *family_name = NULL; enum java_awt_font_style style; - PangoFT2FontMap *ft2_map; + PangoFT2FontMap *ft2_map = NULL; gdk_threads_enter (); + style = (enum java_awt_font_style) style_int; g_assert (self != NULL); diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c index d6ff6f24a..fe9ac8e66 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c @@ -46,21 +46,22 @@ exception statement from your version. */ GdkPoint * translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints, jint npoints, jint x_offset, jint y_offset); -static void realize_cb (GtkWidget *widget, jobject peer); +static void realize_cb (GtkWidget *widget, jobject jgraphics); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState (JNIEnv *env, jobject obj, jobject old) { - struct graphics *g, *g_old; + struct graphics *g = NULL; + struct graphics *g_old = NULL; - g = (struct graphics *) malloc (sizeof (struct graphics)); + gdk_threads_enter (); + + g = (struct graphics *) g_malloc (sizeof (struct graphics)); g_old = (struct graphics *) NSA_GET_PTR (env, old); *g = *g_old; - gdk_threads_enter (); - g->gc = gdk_gc_new (g->drawable); gdk_gc_copy (g->gc, g_old->gc); @@ -71,56 +72,58 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState gdk_colormap_ref (g->cm); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, g); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II (JNIEnv *env, jobject obj, jint width, jint height) { - struct graphics *g; + struct graphics *g = NULL; - g = (struct graphics *) malloc (sizeof (struct graphics)); + gdk_threads_enter (); + + g = (struct graphics *) g_malloc (sizeof (struct graphics)); g->x_offset = g->y_offset = 0; - gdk_threads_enter (); g->drawable = (GdkDrawable *) gdk_pixmap_new (NULL, width, height, gdk_rgb_get_visual ()->depth); g->cm = gdk_rgb_get_cmap (); gdk_colormap_ref (g->cm); g->gc = gdk_gc_new (g->drawable); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, g); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage (JNIEnv *env, jobject obj, jobject source) { - struct graphics *g; - GdkPixmap *pixmap = - gnu_java_awt_peer_gtk_GtkImage_getPixmap(env, source); + struct graphics *g = NULL; + GdkPixmap *pixmap = NULL; + + gdk_threads_enter (); + + pixmap = gnu_java_awt_peer_gtk_GtkImage_getPixmap(env, source); g_assert(pixmap != NULL); gdk_pixmap_ref (pixmap); - g = (struct graphics *) malloc (sizeof (struct graphics)); + g = (struct graphics *) g_malloc (sizeof (struct graphics)); g->x_offset = g->y_offset = 0; - gdk_threads_enter (); - g->drawable = (GdkDrawable *)pixmap; g->cm = gdk_drawable_get_colormap (g->drawable); gdk_colormap_ref (g->cm); g->gc = gdk_gc_new (g->drawable); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, g); + + gdk_threads_leave (); } /* copy the native state of the peer (GtkWidget *) to the native state @@ -129,16 +132,18 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2 (JNIEnv *env, jobject obj, jobject peer) { - struct graphics *g = (struct graphics *) malloc (sizeof (struct graphics)); - void *ptr; - GtkWidget *widget; + struct graphics *g = NULL; + void *ptr = NULL; + GtkWidget *widget = NULL; GdkColor color; - ptr = NSA_GET_PTR (env, peer); - g->x_offset = g->y_offset = 0; - gdk_threads_enter (); + g = (struct graphics *) g_malloc (sizeof (struct graphics)); + ptr = NSA_GET_PTR (env, peer); + g->x_offset = 0; + g->y_offset = 0; + widget = GTK_WIDGET (ptr); g->drawable = (GdkDrawable *) widget->window; @@ -149,25 +154,25 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComp gdk_gc_copy (g->gc, widget->style->fg_gc[GTK_STATE_NORMAL]); color = widget->style->fg[GTK_STATE_NORMAL]; - gdk_threads_leave (); - NSA_SET_PTR (env, obj, g); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals (JNIEnv *env, jobject obj, jobject peer) { - void *ptr; - jobject *gref; + void *ptr = NULL; + jobject *gref = NULL; + + gdk_threads_enter (); NSA_SET_GLOBAL_REF (env, obj); gref = NSA_GET_GLOBAL_REF (env, obj); ptr = NSA_GET_PTR (env, peer); - gdk_threads_enter (); - g_signal_connect_after (G_OBJECT (ptr), "realize", G_CALLBACK (realize_cb), *gref); @@ -178,14 +183,19 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose (JNIEnv *env, jobject obj) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); - g = (struct graphics *) NSA_DEL_PTR (env, obj); - if (!g) return; /* dispose has been called more than once */ - - gdk_threads_enter (); + /* check if dispose has been called already */ + if (!g) + { + gdk_threads_leave (); + return; + } + XFlush (GDK_DISPLAY ()); gdk_gc_destroy (g->gc); @@ -197,22 +207,21 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose gdk_colormap_unref (g->cm); - gdk_threads_leave (); - + g_free (g); - free (g); + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_translateNative (JNIEnv *env, jobject obj, jint x, jint y) { - struct graphics *g; - - g = (struct graphics *) NSA_GET_PTR (env, obj); + struct graphics *g = NULL; gdk_threads_enter (); + g = (struct graphics *) NSA_GET_PTR (env, obj); + g->x_offset += x; g->y_offset += y; @@ -224,10 +233,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString (JNIEnv *env, jobject obj, jobject font, jstring str, jint x, jint y) { struct peerfont *pfont = NULL; - struct graphics *g; - const char *cstr; - int baseline_y; - PangoLayoutIter *iter; + struct graphics *g = NULL; + const char *cstr = NULL; + int baseline_y = 0; + PangoLayoutIter *iter = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); g_assert (g != NULL); @@ -237,8 +248,6 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString cstr = (*env)->GetStringUTFChars (env, str, NULL); - gdk_threads_enter (); - pango_layout_set_font_description (pfont->layout, pfont->desc); pango_layout_set_text (pfont->layout, cstr, -1); iter = pango_layout_get_iter (pfont->layout); @@ -254,24 +263,27 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString pango_layout_set_text (pfont->layout, "", -1); gdk_flush (); - gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, str, cstr); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine (JNIEnv *env, jobject obj, jint x, jint y, jint x2, jint y2) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_draw_line (g->drawable, g->gc, x + g->x_offset, y + g->y_offset, x2 + g->x_offset, y2 + g->y_offset); gdk_flush (); + gdk_threads_leave (); } @@ -279,15 +291,16 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillRect (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - struct graphics *g; - - g = (struct graphics *) NSA_GET_PTR (env, obj); + struct graphics *g = NULL; gdk_threads_enter (); + g = (struct graphics *) NSA_GET_PTR (env, obj); + gdk_draw_rectangle (g->drawable, g->gc, TRUE, x + g->x_offset, y + g->y_offset, width, height); gdk_flush (); + gdk_threads_leave (); } @@ -295,14 +308,16 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawRect (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_draw_rectangle (g->drawable, g->gc, FALSE, x + g->x_offset, y + g->y_offset, width, height); gdk_flush (); + gdk_threads_leave (); } @@ -311,11 +326,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, jint dx, jint dy) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_window_copy_area ((GdkWindow *)g->drawable, g->gc, x + g->x_offset + dx, y + g->y_offset + dy, @@ -323,6 +339,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea x + g->x_offset, y + g->y_offset, width, height); gdk_flush (); + gdk_threads_leave (); } @@ -330,20 +347,21 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - struct graphics *g; + struct graphics *g = NULL; GdkGCValues saved; - GtkWidget *widget; + GtkWidget *widget = NULL; union widget_union w; - g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); + g = (struct graphics *) NSA_GET_PTR (env, obj); + if (!g) { gdk_threads_leave (); return; } + if (GDK_IS_WINDOW (g->drawable)) { w.widget = &widget; @@ -363,6 +381,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect } gdk_flush (); + gdk_threads_leave (); } @@ -370,11 +389,14 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setFunction (JNIEnv *env, jobject obj, jint func) { - struct graphics *g; - g = (struct graphics *) NSA_GET_PTR (env, obj); - + struct graphics *g = NULL; + gdk_threads_enter (); + + g = (struct graphics *) NSA_GET_PTR (env, obj); + gdk_gc_set_function (g->gc, func); + gdk_threads_leave (); } @@ -384,7 +406,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor (JNIEnv *env, jobject obj, jint red, jint green, jint blue) { GdkColor color; - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); color.red = red << 8; color.green = green << 8; @@ -392,7 +416,6 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_color_alloc (g->cm, &color); gdk_gc_set_foreground (g->gc, &color); @@ -404,15 +427,17 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, jint angle1, jint angle2) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_draw_arc (g->drawable, g->gc, FALSE, x + g->x_offset, y + g->y_offset, width, height, angle1 << 6, angle2 << 6); gdk_flush (); + gdk_threads_leave (); } @@ -448,19 +473,21 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolyline (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, jint npoints) { - struct graphics *g; - GdkPoint *points; + struct graphics *g = NULL; + GdkPoint *points = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); points = translate_points (env, xpoints, ypoints, npoints, g->x_offset, g->y_offset); - gdk_threads_enter (); gdk_draw_lines (g->drawable, g->gc, points, npoints); gdk_flush (); - gdk_threads_leave (); g_free (points); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -468,8 +495,10 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, jint npoints) { - struct graphics *g; - GdkPoint *points; + struct graphics *g = NULL; + GdkPoint *points = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); points = translate_points (env, xpoints, ypoints, npoints, @@ -480,12 +509,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon if (points[0].x != points[npoints-1].x || points[0].y != points[npoints-1].y) points[npoints++] = points[0]; - gdk_threads_enter (); gdk_draw_lines (g->drawable, g->gc, points, npoints); gdk_flush (); - gdk_threads_leave (); g_free (points); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -493,18 +522,20 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillPolygon (JNIEnv *env, jobject obj, jintArray xpoints, jintArray ypoints, jint npoints) { - struct graphics *g; - GdkPoint *points; + struct graphics *g = NULL; + GdkPoint *points = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); points = translate_points (env, xpoints, ypoints, npoints, g->x_offset, g->y_offset); - gdk_threads_enter (); gdk_draw_polygon (g->drawable, g->gc, TRUE, points, npoints); gdk_flush (); - gdk_threads_leave (); g_free (points); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -512,15 +543,17 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillArc (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height, jint angle1, jint angle2) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_draw_arc (g->drawable, g->gc, TRUE, x + g->x_offset, y + g->y_offset, width, height, angle1 << 6, angle2 << 6); gdk_flush (); + gdk_threads_leave (); } @@ -528,15 +561,17 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawOval (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_draw_arc (g->drawable, g->gc, FALSE, x + g->x_offset, y + g->y_offset, width, height, 0, 23040); gdk_flush (); + gdk_threads_leave (); } @@ -544,15 +579,17 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_fillOval (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - struct graphics *g; + struct graphics *g = NULL; + + gdk_threads_enter (); g = (struct graphics *) NSA_GET_PTR (env, obj); - gdk_threads_enter (); gdk_draw_arc (g->drawable, g->gc, TRUE, x + g->x_offset, y + g->y_offset, width, height, 0, 23040); gdk_flush (); + gdk_threads_leave (); } @@ -560,9 +597,11 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - struct graphics *g; + struct graphics *g = NULL; GdkRectangle rectangle; + gdk_threads_enter (); + g = (struct graphics *) NSA_GET_PTR (env, obj); rectangle.x = x + g->x_offset; @@ -570,19 +609,19 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle rectangle.width = width; rectangle.height = height; - gdk_threads_enter (); gdk_gc_set_clip_rectangle (g->gc, &rectangle); + gdk_threads_leave (); } -static void realize_cb (GtkWidget *widget __attribute__ ((unused)), - jobject peer) +static void +realize_cb (GtkWidget *widget __attribute__ ((unused)), jobject jgraphics) { gdk_threads_leave (); - (*gdk_env())->CallVoidMethod (gdk_env(), peer, initComponentGraphicsID); + (*gdk_env())->CallVoidMethod (gdk_env(), jgraphics, initComponentGraphicsID); - NSA_DEL_GLOBAL_REF (gdk_env(), peer); + NSA_DEL_GLOBAL_REF (gdk_env(), jgraphics); gdk_threads_enter (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c index 70d195524..9f0f7d47b 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c @@ -71,7 +71,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStaticState (JNIEnv *env, jclass clazz) { gdk_threads_enter(); + NSA_G2D_INIT (env, clazz); + gdk_threads_leave(); } @@ -366,7 +368,8 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState struct graphics2d *g = NULL, *g_old = NULL; gdk_threads_enter(); - g = (struct graphics2d *) malloc (sizeof (struct graphics2d)); + + g = (struct graphics2d *) g_malloc (sizeof (struct graphics2d)); g_assert (g != NULL); memset (g, 0, sizeof(struct graphics2d)); @@ -415,6 +418,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState cairo_pattern_set_filter (g->pattern, CAIRO_FILTER_FAST); NSA_SET_G2D_PTR (env, obj, g); + gdk_threads_leave(); } @@ -423,11 +427,12 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III (JNIEnv *env, jobject obj, jintArray jarr, jint width, jint height) { - struct graphics2d *gr; - jint *cairobuf; + struct graphics2d *gr = NULL; + jint *cairobuf = NULL; gdk_threads_enter(); - gr = (struct graphics2d *) malloc (sizeof (struct graphics2d)); + + gr = (struct graphics2d *) g_malloc (sizeof (struct graphics2d)); g_assert (gr != NULL); memset (gr, 0, sizeof(struct graphics2d)); @@ -470,6 +475,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III width, height); NSA_SET_G2D_PTR (env, obj, gr); + gdk_threads_leave(); } @@ -477,10 +483,11 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II (JNIEnv *env, jobject obj, jint width, jint height) { - struct graphics2d *gr; + struct graphics2d *gr = NULL; gdk_threads_enter(); - gr = (struct graphics2d *) malloc (sizeof (struct graphics2d)); + + gr = (struct graphics2d *) g_malloc (sizeof (struct graphics2d)); g_assert (gr != NULL); memset (gr, 0, sizeof(struct graphics2d)); @@ -504,6 +511,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__II if (gr->debug) printf ("constructed offscreen drawable of size (%d,%d)\n", width, height); NSA_SET_G2D_PTR (env, obj, gr); + gdk_threads_leave(); } @@ -511,13 +519,25 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable (JNIEnv *env, jobject self, jobject other, jint x, jint y) { - struct graphics2d *src = NULL, *dst = NULL; - gint s_height, s_width, d_height, d_width, height, width; + struct graphics2d *src = NULL; + struct graphics2d *dst = NULL; + gint s_height; + gint s_width; + gint d_height; + gint d_width; + gint height; + gint width; cairo_matrix_t matrix; cairo_operator_t tmp_op; gdk_threads_enter(); - if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, self)) + { + gdk_threads_leave(); + return; + } + src = (struct graphics2d *)NSA_GET_G2D_PTR (env, other); dst = (struct graphics2d *)NSA_GET_G2D_PTR (env, self); g_assert (src != NULL); @@ -553,6 +573,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable end_drawing_operation(env, dst); if (src->debug) printf ("copied %d x %d pixels from offscreen drawable\n", width, height); + gdk_threads_leave(); } @@ -565,11 +586,17 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkCo void *ptr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } + ptr = NSA_GET_PTR (env, peer); g_assert (ptr != NULL); - gr = (struct graphics2d *) malloc (sizeof (struct graphics2d)); + gr = (struct graphics2d *) g_malloc (sizeof (struct graphics2d)); g_assert (gr != NULL); memset (gr, 0, sizeof(struct graphics2d)); @@ -590,6 +617,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkCo init_graphics2d_as_pixbuf (gr); NSA_SET_G2D_PTR (env, obj, gr); + gdk_threads_leave(); } @@ -599,10 +627,10 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_connectSignals { void *ptr; - ptr = NSA_GET_PTR (env, peer); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, peer); + g_signal_connect_after (G_OBJECT (ptr), "realize", G_CALLBACK (realize_cb), obj); @@ -616,7 +644,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose struct graphics2d *gr = NULL; gdk_threads_enter(); + gr = (struct graphics2d *) NSA_DEL_G2D_PTR (env, obj); + if (gr == NULL) { gdk_threads_leave(); @@ -641,7 +671,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose cairo_surface_destroy (gr->pattern_surface); if (gr->pattern_pixels) - free (gr->pattern_pixels); + g_free (gr->pattern_pixels); if (gr->mode == MODE_JAVA_ARRAY) { @@ -652,11 +682,11 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_dispose if (gr->debug) printf ("disposed of graphics2d\n"); - free (gr); + g_free (gr); + gdk_threads_leave(); } - JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient (JNIEnv *env, jobject obj, @@ -670,11 +700,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient cairo_surface_t *surf = NULL; cairo_t *cr2 = NULL; cairo_matrix_t mat; + + gdk_threads_enter(); + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); - gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } + if (gr->debug) printf ("setGradient (%f,%f) -> (%f,%f); (%d,%d,%d,%d) -> (%d,%d,%d,%d)\n", x1, y1, x2, y2, @@ -774,6 +811,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient gr->pattern = cairo_pattern_create_for_surface(surf); cairo_set_source (gr->cr, gr->pattern); + gdk_threads_leave(); } @@ -785,7 +823,13 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels jint *jpixels = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -821,6 +865,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface); g_assert (gr->pattern != NULL); cairo_set_source (gr->cr, gr->pattern); + gdk_threads_leave(); } @@ -834,7 +879,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels jdouble *native_matrix = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -889,12 +939,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSave struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_save\n"); cairo_save (gr->cr); + gdk_threads_leave(); } @@ -905,13 +961,19 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRestore struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_restore\n"); cairo_restore (gr->cr); update_pattern_transform (gr); + gdk_threads_leave(); } @@ -923,12 +985,22 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix jdouble *native_matrix = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); + /* cairoSetMatrix was called before this graphics object's component was realized. */ - if (gr == NULL) { gdk_threads_leave (); return; } + if (gr == NULL) + { + gdk_threads_leave (); + return; + } native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL); g_assert (native_matrix != NULL); @@ -952,6 +1024,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix (*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0); update_pattern_transform (gr); + gdk_threads_leave(); } @@ -1002,9 +1075,10 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_releasePeerGraphicsResource { struct peerfont *pfont = NULL; + gdk_threads_enter(); + g_assert(java_font != NULL); - gdk_threads_enter(); pfont = (struct peerfont *) NSA_GET_FONT_PTR (env, java_font); g_assert (pfont != NULL); if (pfont->graphics_resource != NULL) @@ -1012,6 +1086,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_releasePeerGraphicsResource cairo_font_face_destroy ((cairo_font_face_t *) pfont->graphics_resource); pfont->graphics_resource = NULL; } + gdk_threads_leave(); } @@ -1088,12 +1163,17 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector float *native_positions; jint i = 0; + gdk_threads_enter (); + g_assert (self != NULL); g_assert (java_codes != NULL); g_assert (java_positions != NULL); - gdk_threads_enter (); - if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; } + if (peer_is_disposed(env, self)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *)NSA_GET_G2D_PTR (env, self); g_assert (gr != NULL); @@ -1123,8 +1203,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector cairo_show_glyphs (gr->cr, glyphs, n); end_drawing_operation (env, gr); + g_free(glyphs); + gdk_threads_leave (); - free(glyphs); } JNIEXPORT void JNICALL @@ -1143,6 +1224,8 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGdkTextLayout cairo_glyph_t *glyphs = NULL; gint n_glyphs = 0; + gdk_threads_enter (); + g_assert (self != NULL); g_assert (java_layout != NULL); @@ -1155,8 +1238,11 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGdkTextLayout if (gr->debug) printf ("painting pango layout\n"); - gdk_threads_enter (); - if (peer_is_disposed(env, self)) { gdk_threads_leave(); return; } + if (peer_is_disposed(env, self)) + { + gdk_threads_leave(); + return; + } i = pango_layout_get_iter (tl->pango_layout); g_assert (i != NULL); @@ -1177,6 +1263,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGdkTextLayout cairo_translate (gr->cr, -x, -y); pango_layout_iter_free (i); + gdk_threads_leave (); } @@ -1187,7 +1274,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1242,6 +1334,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetOperator cairo_set_operator (gr->cr, CAIRO_OPERATOR_XOR); break; } + gdk_threads_leave(); } @@ -1252,7 +1345,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColor struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1279,7 +1377,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); if (gr->debug) printf ("cairo_set_fill_rule %d\n", rule); @@ -1293,6 +1396,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFillRule cairo_set_fill_rule (gr->cr, CAIRO_FILL_RULE_EVEN_ODD); break; } + gdk_threads_leave(); } @@ -1303,12 +1407,15 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + return; gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_line_width %f\n", width); cairo_set_line_width (gr->cr, width); + gdk_threads_leave(); } @@ -1319,7 +1426,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1338,17 +1450,23 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE); break; } + gdk_threads_leave(); } JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin +Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin (JNIEnv *env, jobject obj, jint join) { struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1367,6 +1485,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL); break; } + gdk_threads_leave(); } @@ -1378,7 +1497,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash jdouble *dasharr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1387,6 +1511,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash g_assert (dasharr != NULL); cairo_set_dash (gr->cr, dasharr, ndash, offset); (*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0); + gdk_threads_leave(); } @@ -1397,16 +1522,21 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimit struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_set_miter_limit %f\n", miter); cairo_set_miter_limit (gr->cr, miter); + gdk_threads_leave(); } - JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath (JNIEnv *env, jobject obj) @@ -1414,12 +1544,24 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoNewPath struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); - if (gr == NULL) { gdk_threads_leave (); return; } + + if (gr == NULL) + { + gdk_threads_leave (); + return; + } + if (gr->debug) printf ("cairo_new_path\n"); cairo_new_path (gr->cr); + gdk_threads_leave(); } @@ -1430,12 +1572,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoMoveTo struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_move_to (%f, %f)\n", x, y); cairo_move_to (gr->cr, x, y); + gdk_threads_leave(); } @@ -1446,12 +1594,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoLineTo struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_line_to (%f, %f)\n", x, y); cairo_line_to (gr->cr, x, y); + gdk_threads_leave(); } @@ -1462,12 +1616,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoCurveTo struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_curve_to (%f, %f), (%f, %f), (%f, %f)\n", x1, y1, x2, y2, x3, y3); cairo_curve_to (gr->cr, x1, y1, x2, y2, x3, y3); + gdk_threads_leave(); } @@ -1478,12 +1638,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelMoveTo struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rel_move_to (%f, %f)\n", dx, dy); cairo_rel_move_to (gr->cr, dx, dy); + gdk_threads_leave(); } @@ -1494,12 +1660,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelLineTo struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rel_line_to (%f, %f)\n", dx, dy); cairo_rel_line_to (gr->cr, dx, dy); + gdk_threads_leave(); } @@ -1510,12 +1682,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRelCurveTo struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_rel_curve_to (%f, %f), (%f, %f), (%f, %f)\n", dx1, dy1, dx2, dy2, dx3, dy3); cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3); + gdk_threads_leave(); } @@ -1526,12 +1704,24 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRectangle struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); - if (gr == NULL) { gdk_threads_leave (); return; } + + if (gr == NULL) + { + gdk_threads_leave (); + return; + } + if (gr->debug) printf ("cairo_rectangle (%f, %f) (%f, %f)\n", x, y, width, height); cairo_rectangle (gr->cr, x, y, width, height); + gdk_threads_leave(); } @@ -1542,12 +1732,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClosePath struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); if (gr->debug) printf ("cairo_close_path\n"); cairo_close_path (gr->cr); + gdk_threads_leave(); } @@ -1558,7 +1754,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoStroke struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1566,6 +1767,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoStroke begin_drawing_operation (env, gr); cairo_stroke (gr->cr); end_drawing_operation (env, gr); + gdk_threads_leave(); } @@ -1576,7 +1778,12 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoFill struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); g_assert (gr != NULL); @@ -1584,6 +1791,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoFill begin_drawing_operation (env, gr); cairo_fill (gr->cr); end_drawing_operation (env, gr); + gdk_threads_leave(); } @@ -1594,15 +1802,27 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip struct graphics2d *gr = NULL; gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave(); + return; + } gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); - if (gr == NULL) { gdk_threads_leave (); return; } + + if (gr == NULL) + { + gdk_threads_leave (); + return; + } + if (gr->debug) printf ("cairo_clip\n"); begin_drawing_operation (env, gr); cairo_reset_clip (gr->cr); cairo_clip (gr->cr); end_drawing_operation (env, gr); + gdk_threads_leave(); } @@ -1610,31 +1830,37 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter (JNIEnv *env, jobject obj, jint filter) { - struct graphics2d *gr = NULL; + struct graphics2d *gr = NULL; + + gdk_threads_enter(); + + if (peer_is_disposed(env, obj)) + { + gdk_threads_leave (); + return; + } + + gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); + g_assert (gr != NULL); + if (gr->debug) printf ("cairo_surface_set_filter %d\n", filter); + switch ((enum java_awt_rendering_hints_filter) filter) + { + case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR: + cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST); + break; + case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR: + cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BILINEAR); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED: + cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_FAST); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT: + cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST); + break; + case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY: + cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BEST); + break; + } - gdk_threads_enter(); - if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; } - - gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj); - g_assert (gr != NULL); - if (gr->debug) printf ("cairo_surface_set_filter %d\n", filter); - switch ((enum java_awt_rendering_hints_filter) filter) - { - case java_awt_rendering_hints_VALUE_INTERPOLATION_NEAREST_NEIGHBOR: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST); - break; - case java_awt_rendering_hints_VALUE_INTERPOLATION_BILINEAR: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BILINEAR); - break; - case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_SPEED: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_FAST); - break; - case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_DEFAULT: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_NEAREST); - break; - case java_awt_rendering_hints_VALUE_ALPHA_INTERPOLATION_QUALITY: - cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BEST); - break; - } gdk_threads_leave(); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c index ca9d5642e..0467c3c7a 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c @@ -52,9 +52,10 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetFontFamilies (JNIEnv *env, jobject self __attribute__((unused)), jobjectArray family_name) { - PangoContext *context; - PangoFontFamily **families; - int n_families, idx; + PangoContext *context = NULL; + PangoFontFamily **families = NULL; + int n_families = 0; + int idx = 0; gdk_threads_enter (); @@ -72,6 +73,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetFontFamilies (*env)->SetObjectArrayElement (env, family_name, idx, name); } g_free (families); + gdk_threads_leave (); } @@ -79,10 +81,10 @@ JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetNumFontFamilies (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { - PangoContext *context; - PangoFontFamily **families; - gint n_families; - jint num; + PangoContext *context = NULL; + PangoFontFamily **families = NULL; + gint n_families = 0; + gint num = 0; gdk_threads_enter (); @@ -93,6 +95,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphicsEnvironment_nativeGetNumFontFamilies num = n_families; g_free (families); + gdk_threads_leave (); return num; diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c index 39918fcec..7f1678717 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c @@ -65,25 +65,28 @@ static jmethodID dataOutputWriteID; static jmethodID registerFormatID; static void -area_prepared (GdkPixbufLoader *loader, +area_prepared_cb (GdkPixbufLoader *loader, jobject *decoder) { - JNIEnv *env; + JNIEnv *env = NULL; union env_union e; - jint width, height; + jint width = 0; + jint height = 0; + GdkPixbuf *pixbuf = NULL; - GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); + pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); g_assert (pixbuf != NULL); width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); - gdk_threads_leave (); - g_assert (decoder != NULL); e.jni_env = &env; (*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1); + + gdk_threads_leave (); + (*env)->CallVoidMethod (env, *decoder, areaPreparedID, @@ -93,7 +96,7 @@ area_prepared (GdkPixbufLoader *loader, } static void -area_updated (GdkPixbufLoader *loader, +area_updated_cb (GdkPixbufLoader *loader, gint x, gint y, gint width, gint height, jobject *decoder) @@ -147,6 +150,7 @@ area_updated (GdkPixbufLoader *loader, gdk_threads_leave (); (*env)->ReleaseIntArrayElements (env, jpixels, java_pixels, 0); + (*env)->CallVoidMethod (env, *decoder, areaUpdatedID, @@ -154,12 +158,14 @@ area_updated (GdkPixbufLoader *loader, (jint) width, (jint) height, jpixels, stride_pixels); + (*env)->DeleteLocalRef(env, jpixels); + gdk_threads_enter (); } static void -closed (GdkPixbufLoader *loader __attribute__((unused)), jobject *decoder) +closed_cb (GdkPixbufLoader *loader __attribute__((unused)), jobject *decoder) { JNIEnv *env; union env_union e; @@ -167,8 +173,10 @@ closed (GdkPixbufLoader *loader __attribute__((unused)), jobject *decoder) (*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1); gdk_threads_leave (); + (*env)->DeleteGlobalRef (env, *decoder); - free (decoder); + g_free (decoder); + gdk_threads_enter (); } @@ -181,19 +189,21 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState GdkPixbufLoader *loader = NULL; jobject *decoder = NULL; - decoder = (jobject *) malloc (sizeof (jobject)); + gdk_threads_enter (); + + decoder = (jobject *) g_malloc (sizeof (jobject)); g_assert (decoder != NULL); *decoder = (*env)->NewGlobalRef (env, obj); - gdk_threads_enter (); loader = gdk_pixbuf_loader_new (); g_assert (loader != NULL); - g_signal_connect (loader, "area-prepared", G_CALLBACK (area_prepared), decoder); - g_signal_connect (loader, "area-updated", G_CALLBACK (area_updated), decoder); - g_signal_connect (loader, "closed", G_CALLBACK (closed), decoder); - gdk_threads_leave (); + g_signal_connect (loader, "area-prepared", G_CALLBACK (area_prepared_cb), decoder); + g_signal_connect (loader, "area-updated", G_CALLBACK (area_updated_cb), decoder); + g_signal_connect (loader, "closed", G_CALLBACK (closed_cb), decoder); NSA_SET_PB_PTR (env, obj, loader); + + gdk_threads_leave (); } static void @@ -303,16 +313,17 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish { GdkPixbufLoader *loader = NULL; + gdk_threads_enter (); + loader = (GdkPixbufLoader *)NSA_DEL_PB_PTR (env, obj); if (loader == NULL) return; - gdk_threads_enter (); if (needs_close) gdk_pixbuf_loader_close (loader, NULL); g_object_unref (loader); - gdk_threads_leave (); + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -320,18 +331,22 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone (JNIEnv *env, jobject obj) { GError *err = NULL; - GdkPixbufLoader *loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj); - g_assert (loader != NULL); + GdkPixbufLoader *loader = NULL; gdk_threads_enter (); + + loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj); + g_assert (loader != NULL); + gdk_pixbuf_loader_close (loader, &err); - gdk_threads_leave (); if (err != NULL) { JCL_ThrowException (env, "java/io/IOException", err->message); g_error_free (err); } + + gdk_threads_leave (); } struct stream_save_request @@ -352,13 +367,16 @@ save_to_stream(const gchar *buf, jbyte *cbuf; gdk_threads_leave (); + jbuf = (*(ssr->env))->NewByteArray ((ssr->env), count); cbuf = (*(ssr->env))->GetByteArrayElements ((ssr->env), jbuf, NULL); memcpy (cbuf, buf, count); (*(ssr->env))->ReleaseByteArrayElements ((ssr->env), jbuf, cbuf, 0); (*(ssr->env))->CallVoidMethod ((ssr->env), *(ssr->stream), dataOutputWriteID, jbuf); + gdk_threads_enter (); + return TRUE; } @@ -375,8 +393,10 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage GError *err = NULL; const char *enctype; int i; - struct stream_save_request ssr; + + gdk_threads_enter (); + ssr.stream = &stream; ssr.env = env; @@ -420,7 +440,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage *p++ = a; } - gdk_threads_enter (); pixbuf = gdk_pixbuf_new_from_data (pix, GDK_COLORSPACE_RGB, (gboolean) hasAlpha, @@ -437,11 +456,12 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage g_object_unref (pixbuf); - gdk_threads_leave (); g_free(pix); (*env)->ReleaseStringUTFChars (env, jenctype, enctype); (*env)->ReleaseIntArrayElements (env, jarr, ints, 0); + + gdk_threads_leave (); } @@ -453,6 +473,8 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes jbyte *bytes = NULL; GError *err = NULL; + gdk_threads_enter (); + g_assert (len >= 1); g_assert (jarr != NULL); @@ -461,9 +483,7 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj); g_assert (loader != NULL); - gdk_threads_enter (); gdk_pixbuf_loader_write (loader, (const guchar *) bytes, len, &err); - gdk_threads_leave (); (*env)->ReleaseByteArrayElements (env, jarr, bytes, 0); @@ -472,4 +492,6 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes JCL_ThrowException (env, "java/io/IOException", err->message); g_error_free (err); } + + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c index e884004cb..4868ce0bf 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c @@ -102,6 +102,7 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseMove x, y, CurrentTime); XFlush (xdisplay); + gdk_threads_leave (); } @@ -123,6 +124,7 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mousePress True, CurrentTime); XFlush (xdisplay); + gdk_threads_leave (); } @@ -144,6 +146,7 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseRelease False, CurrentTime); XFlush (xdisplay); + gdk_threads_leave (); } @@ -182,6 +185,7 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_mouseWheel } XFlush (xdisplay); + gdk_threads_leave (); } @@ -225,6 +229,7 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyPress g_free (keymap_keys); XFlush (xdisplay); + gdk_threads_leave (); } @@ -268,6 +273,7 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_keyRelease g_free (keymap_keys); XFlush (xdisplay); + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c index a86bb09db..5966f8947 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c @@ -58,12 +58,14 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_initState struct textlayout *tl; gdk_threads_enter (); + g_assert(self != NULL); tl = g_malloc0 (sizeof (struct textlayout)); g_assert(tl != NULL); tl->pango_layout = pango_layout_new(gdk_pango_context_get()); g_assert(tl->pango_layout != NULL); NSA_SET_TEXT_LAYOUT_PTR (env, self, tl); + gdk_threads_leave (); } @@ -76,6 +78,7 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText gint len = 0; gdk_threads_enter (); + g_assert(self != NULL); g_assert(text != NULL); @@ -90,6 +93,7 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText pango_layout_set_text (tl->pango_layout, text, len); (*env)->ReleaseStringUTFChars (env, text, str); + gdk_threads_leave (); } @@ -102,6 +106,7 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_indexToPos jdouble *nativePos; gdk_threads_enter (); + g_assert(self != NULL); g_assert(javaPos != NULL); @@ -121,6 +126,7 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_indexToPos nativePos[3] = (jdouble) pangoPos.height; (*env)->ReleaseDoubleArrayElements (env, javaPos, nativePos, 0); + gdk_threads_leave (); } @@ -133,6 +139,7 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_getExtents jdouble *nativeInkExtents, *nativeLogExtents; gdk_threads_enter (); + g_assert(self != NULL); g_assert(javaInkExtents != NULL); g_assert(javaLogExtents != NULL); @@ -173,11 +180,13 @@ Java_gnu_java_awt_peer_gtk_GdkTextLayout_dispose struct textlayout *tl; gdk_threads_enter (); + g_assert(self != NULL); tl = (struct textlayout *) NSA_DEL_TEXT_LAYOUT_PTR (env, self); g_assert(tl != NULL); if (tl->pango_layout != NULL) g_object_unref (tl->pango_layout); g_free(tl); + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c index 07574ed7d..827123d4d 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c @@ -46,8 +46,8 @@ static gboolean focus_out_cb (GtkWidget *widget, GdkEventFocus *event, jobject peer); -static void block_expose_events_cb (GtkWidget *widget, - jobject peer); +static void block_expose_event_cb (GtkWidget *widget, + jobject peer); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create @@ -57,21 +57,21 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create GtkWidget *eventbox; GtkWidget *button; + gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); c_label = (*env)->GetStringUTFChars (env, label, NULL); - gdk_threads_enter (); - eventbox = gtk_event_box_new (); button = gtk_button_new_with_label (c_label); gtk_container_add (GTK_CONTAINER (eventbox), button); gtk_widget_show (button); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, label, c_label); NSA_SET_PTR (env, obj, eventbox); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -82,11 +82,11 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals jobject *gref; GtkWidget *button; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); gref = NSA_GET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - button = gtk_bin_get_child (GTK_BIN (ptr)); g_signal_connect (G_OBJECT (ptr), "event", @@ -102,10 +102,10 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals G_CALLBACK (focus_out_cb), *gref); g_signal_connect_after (G_OBJECT (button), "pressed", - G_CALLBACK (block_expose_events_cb), *gref); + G_CALLBACK (block_expose_event_cb), *gref); g_signal_connect_after (G_OBJECT (button), "released", - G_CALLBACK (block_expose_events_cb), *gref); + G_CALLBACK (block_expose_event_cb), *gref); gdk_threads_leave (); } @@ -119,19 +119,19 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetLabel GtkWidget *label; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); text = (*env)->GetStringUTFChars (env, jtext, NULL); - gdk_threads_enter (); - button = gtk_bin_get_child (GTK_BIN (ptr)); label = gtk_bin_get_child (GTK_BIN (button)); gtk_label_set_text (GTK_LABEL (label), text); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, jtext, text); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -144,12 +144,12 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont GtkWidget *label; PangoFontDescription *font_desc; + gdk_threads_enter(); + ptr = NSA_GET_PTR (env, obj); font_name = (*env)->GetStringUTFChars (env, name, NULL); - gdk_threads_enter(); - button = gtk_bin_get_child (GTK_BIN (ptr)); label = gtk_bin_get_child (GTK_BIN (button)); @@ -166,9 +166,9 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont pango_font_description_free (font_desc); - gdk_threads_leave(); - (*env)->ReleaseStringUTFChars (env, name, font_name); + + gdk_threads_leave(); } JNIEXPORT void JNICALL @@ -184,6 +184,8 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetBackground GtkWidget *button; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); normal_color.red = (red / 255.0) * 65535; @@ -205,8 +207,6 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetBackground prelight_color.green = prelight_green > 65535 ? 65535 : prelight_green; prelight_color.blue = prelight_blue > 65535 ? 65535 : prelight_blue; - gdk_threads_enter (); - button = gtk_bin_get_child (GTK_BIN (ptr)); gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &normal_color); @@ -225,14 +225,14 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetForeground GtkWidget *label; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); color.red = (red / 255.0) * 65535; color.green = (green / 255.0) * 65535; color.blue = (blue / 255.0) * 65535; - gdk_threads_enter (); - button = gtk_bin_get_child (GTK_BIN (ptr)); label = gtk_bin_get_child (GTK_BIN (button)); @@ -250,10 +250,10 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate GtkWidget *button; void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + button = gtk_bin_get_child (GTK_BIN (ptr)); gtk_widget_activate (GTK_WIDGET (button)); @@ -267,11 +267,13 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetRequestFocus void *ptr; GtkWidget *button; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); button = gtk_bin_get_child (GTK_BIN (ptr)); gtk_widget_grab_focus (button); + gdk_threads_leave (); } @@ -282,10 +284,10 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds GtkWidget *widget, *child; void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + widget = GTK_WIDGET (ptr); /* We assume that -1 is a width or height and not a request for the @@ -317,9 +319,9 @@ focus_in_cb (GtkWidget *widget __attribute((unused)), { gdk_threads_leave (); (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postFocusEventID, - AWT_FOCUS_GAINED, - JNI_FALSE); + postFocusEventID, + AWT_FOCUS_GAINED, + JNI_FALSE); gdk_threads_enter (); return FALSE; } @@ -331,25 +333,29 @@ focus_out_cb (GtkWidget *widget __attribute((unused)), { gdk_threads_leave (); (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postFocusEventID, - AWT_FOCUS_LOST, - JNI_FALSE); + postFocusEventID, + AWT_FOCUS_LOST, + JNI_FALSE); gdk_threads_enter (); return FALSE; } static void -block_expose_events_cb (GtkWidget *widget, jobject peer) +block_expose_event_cb (GtkWidget *widget, jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, - beginNativeRepaintID); + beginNativeRepaintID); + gdk_threads_enter (); gdk_window_process_updates (widget->window, TRUE); gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, endNativeRepaintID); + gdk_threads_enter (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c index 592cd02bb..52922ddb8 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c @@ -45,16 +45,14 @@ Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create { gpointer widget; + gdk_threads_enter (); + /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - widget = gtk_type_new (gtk_drawing_area_get_type ()); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, widget); -} - + gdk_threads_leave (); +} diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c index 93fab16c0..4f2875092 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c @@ -56,8 +56,9 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove void *ptr; GSList *list; - ptr = NSA_GET_PTR (env, checkbox); gdk_threads_enter (); + + ptr = NSA_GET_PTR (env, checkbox); button = GTK_RADIO_BUTTON (ptr); /* Update the group to point to some other widget in the group. We @@ -70,8 +71,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove break; } - gdk_threads_leave (); - NSA_SET_PTR (env, obj, list ? list->data : NULL); -} + gdk_threads_leave (); +} diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c index 87803a7df..77836cedd 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c @@ -46,20 +46,20 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create GtkWidget *widget; const char *str; + gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL); - gdk_threads_enter (); - widget = gtk_check_menu_item_new_with_label (str); gtk_widget_show (widget); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, label, str); NSA_SET_PTR (env, obj, widget); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -68,9 +68,11 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_setState { void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (ptr), state); + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c index b37f3c1df..f06f0ddd1 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c @@ -40,7 +40,7 @@ exception statement from your version. */ #include "gnu_java_awt_peer_gtk_GtkCheckboxPeer.h" #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" -static void item_toggled (GtkToggleButton *item, jobject peer); +static void item_toggled_cb (GtkToggleButton *item, jobject peer); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create @@ -48,10 +48,10 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create { GtkWidget *button; - NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); + if (group == NULL) button = gtk_check_button_new_with_label (""); else @@ -66,23 +66,25 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create } } - gdk_threads_leave (); - NSA_SET_PTR (env, obj, button); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals (JNIEnv *env, jobject obj) { - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); - g_assert (gref); + void *ptr = NULL; + jobject *gref = NULL; gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); + g_signal_connect (G_OBJECT (ptr), "toggled", - GTK_SIGNAL_FUNC (item_toggled), *gref); + G_CALLBACK (item_toggled_cb), *gref); gdk_threads_leave (); @@ -97,10 +99,10 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup GtkRadioButton *button; void *native_group, *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + /* FIXME: we can't yet switch between a checkbutton and a radiobutton. However, AWT requires this. For now we just crash. */ @@ -115,8 +117,6 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup gtk_radio_button_group (GTK_RADIO_BUTTON (native_group))); - gdk_threads_leave (); - /* If the native group wasn't set on the new CheckboxGroup, then set it now so that the right thing will happen with the next radiobutton. The native state for a CheckboxGroup is a pointer @@ -126,6 +126,8 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup notified. */ if (native_group == NULL) NSA_SET_PTR (env, group, native_group); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -134,10 +136,10 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkToggleButtonSetActive { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr), is_active); gdk_threads_leave (); @@ -153,18 +155,18 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont GtkWidget *label; PangoFontDescription *font_desc; + gdk_threads_enter(); + ptr = NSA_GET_PTR (env, obj); button = GTK_WIDGET (ptr); label = gtk_bin_get_child (GTK_BIN(button)); if (!label) - return; + return; font_name = (*env)->GetStringUTFChars (env, name, NULL); - gdk_threads_enter(); - font_desc = pango_font_description_from_string (font_name); pango_font_description_set_size (font_desc, size * dpi_conversion_factor); @@ -178,9 +180,9 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont pango_font_description_free (font_desc); - gdk_threads_leave(); - (*env)->ReleaseStringUTFChars (env, name, font_name); + + gdk_threads_leave(); } JNIEXPORT void JNICALL @@ -191,27 +193,31 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkButtonSetLabel GtkWidget *label_widget; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); c_label = (*env)->GetStringUTFChars (env, label, NULL); - gdk_threads_enter (); - label_widget = gtk_bin_get_child (GTK_BIN (ptr)); gtk_label_set_text (GTK_LABEL (label_widget), c_label); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, label, c_label); + + gdk_threads_leave (); } static void -item_toggled (GtkToggleButton *item, jobject peer) +item_toggled_cb (GtkToggleButton *item, jobject peer) { + gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postItemEventID, - peer, - item->active ? - (jint) AWT_ITEM_SELECTED : - (jint) AWT_ITEM_DESELECTED); + postItemEventID, + peer, + item->active ? + (jint) AWT_ITEM_SELECTED : + (jint) AWT_ITEM_DESELECTED); + + gdk_threads_enter (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c index 030cb73d0..fb9f5c709 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c @@ -39,7 +39,7 @@ exception statement from your version. */ #include "gtkpeer.h" #include "gnu_java_awt_peer_gtk_GtkChoicePeer.h" -static void selection_changed (GtkComboBox *combobox, jobject peer); +static void selection_changed_cb (GtkComboBox *combobox, jobject peer); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create @@ -48,19 +48,34 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create GtkWidget *combobox; jobject *gref; + gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); gref = NSA_GET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - combobox = gtk_combo_box_new_text (); - g_signal_connect (combobox, "changed", - G_CALLBACK (selection_changed), *gref); + NSA_SET_PTR (env, obj, combobox); gdk_threads_leave (); +} - NSA_SET_PTR (env, obj, combobox); +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkChoicePeer_connectSignals + (JNIEnv *env, jobject obj) +{ + void *ptr = NULL; + jobject *gref = NULL; + + gdk_threads_enter (); + + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); + + g_signal_connect (G_OBJECT (ptr), "changed", + G_CALLBACK (selection_changed_cb), *gref); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -70,10 +85,10 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append gpointer ptr; jsize count, i; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + count = (*env)->GetArrayLength (env, items); for (i = 0; i < count; i++) @@ -99,15 +114,17 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd void *ptr; const char *label; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); label = (*env)->GetStringUTFChars (env, item, 0); - gdk_threads_enter (); gtk_combo_box_insert_text (GTK_COMBO_BOX (ptr), index, label); - gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, item, label); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -116,10 +133,12 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove { void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); gtk_combo_box_remove_text (GTK_COMBO_BOX (ptr), index); + gdk_threads_leave (); } @@ -131,10 +150,10 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemoveAll GtkTreeModel *model; gint count, i; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + model = gtk_combo_box_get_model (GTK_COMBO_BOX (ptr)); count = gtk_tree_model_iter_n_children (model, NULL); @@ -154,10 +173,12 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_select { void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); gtk_combo_box_set_active (GTK_COMBO_BOX (ptr), index); + gdk_threads_leave (); } @@ -168,16 +189,18 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeGetSelected void *ptr; int index; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); index = gtk_combo_box_get_active (GTK_COMBO_BOX (ptr)); + gdk_threads_leave (); return index; } -static void selection_changed (GtkComboBox *combobox, jobject peer) +static void selection_changed_cb (GtkComboBox *combobox, jobject peer) { jstring label; GtkTreeModel *model; @@ -190,18 +213,17 @@ static void selection_changed (GtkComboBox *combobox, jobject peer) if (index >= 0) { model = gtk_combo_box_get_model (combobox); - gtk_combo_box_get_active_iter (combobox, &iter); - gtk_tree_model_get (model, &iter, 0, &selected, -1); + label = (*gdk_env())->NewStringUTF (gdk_env(), selected); gdk_threads_leave (); - label = (*gdk_env())->NewStringUTF (gdk_env(), selected); (*gdk_env())->CallVoidMethod (gdk_env(), peer, choicePostItemEventID, label, (jint) AWT_ITEM_SELECTED); + gdk_threads_enter (); } } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c index b2717e8d1..cfb21f494 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c @@ -43,9 +43,9 @@ jmethodID stringSelectionReceivedID; jmethodID stringSelectionHandlerID; jmethodID selectionClearID; -void selection_received (GtkWidget *, GtkSelectionData *, guint, gpointer); -void selection_get (GtkWidget *, GtkSelectionData *, guint, guint, gpointer); -gint selection_clear (GtkWidget *, GdkEventSelection *); +void selection_received_cb (GtkWidget *, GtkSelectionData *, guint, gpointer); +void selection_get_cb (GtkWidget *, GtkSelectionData *, guint, guint, gpointer); +gint selection_clear_cb (GtkWidget *, GdkEventSelection *); GtkWidget *clipboard; jobject cb_obj; @@ -54,6 +54,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env, jobject obj) { + gdk_threads_enter (); + if (!stringSelectionReceivedID) { jclass gtkclipboard; @@ -72,20 +74,19 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env, cb_obj = (*env)->NewGlobalRef (env, obj); - gdk_threads_enter (); clipboard = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT(clipboard), "selection_received", - GTK_SIGNAL_FUNC (selection_received), NULL); + GTK_SIGNAL_FUNC (selection_received_cb), NULL); g_signal_connect (G_OBJECT(clipboard), "selection_clear_event", - GTK_SIGNAL_FUNC (selection_clear), NULL); + GTK_SIGNAL_FUNC (selection_clear_cb), NULL); gtk_selection_add_target (clipboard, GDK_SELECTION_PRIMARY, GDK_TARGET_STRING, 0); g_signal_connect (G_OBJECT(clipboard), "selection_get", - GTK_SIGNAL_FUNC (selection_get), NULL); + GTK_SIGNAL_FUNC (selection_get_cb), NULL); gdk_threads_leave (); } @@ -95,49 +96,63 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_requestStringConversion (JNIEnv *env __attribute__((unused)), jclass clazz __attribute__((unused))) { gdk_threads_enter (); + gtk_selection_convert (clipboard, GDK_SELECTION_PRIMARY, GDK_TARGET_STRING, GDK_CURRENT_TIME); + gdk_threads_leave (); } void -selection_received (GtkWidget *widget __attribute__((unused)), - GtkSelectionData *selection_data __attribute__((unused)), - guint time __attribute__((unused)), - gpointer data __attribute__((unused))) +selection_received_cb (GtkWidget *widget __attribute__((unused)), + GtkSelectionData *selection_data __attribute__((unused)), + guint time __attribute__((unused)), + gpointer data __attribute__((unused))) { /* Check to see if retrieval succeeded */ if (selection_data->length < 0 || selection_data->type != GDK_SELECTION_TYPE_STRING) { + gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, stringSelectionReceivedID, NULL); + + gdk_threads_enter (); } else { char *str = (char *) selection_data->data; + gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, stringSelectionReceivedID, (*gdk_env())->NewStringUTF (gdk_env(), str)); + + gdk_threads_enter (); } return; } void -selection_get (GtkWidget *widget __attribute__((unused)), - GtkSelectionData *selection_data, - guint info __attribute__((unused)), - guint time __attribute__((unused)), - gpointer data __attribute__((unused))) +selection_get_cb (GtkWidget *widget __attribute__((unused)), + GtkSelectionData *selection_data, + guint info __attribute__((unused)), + guint time __attribute__((unused)), + gpointer data __attribute__((unused))) { jstring jstr; const char *utf; jsize utflen; + gdk_threads_leave (); + jstr = (*gdk_env())->CallObjectMethod (gdk_env(), cb_obj, stringSelectionHandlerID); + gdk_threads_enter (); + if (!jstr) { gtk_selection_data_set (selection_data, @@ -174,10 +189,14 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_selectionGet } gint -selection_clear (GtkWidget *widget __attribute__((unused)), - GdkEventSelection *event __attribute__((unused))) +selection_clear_cb (GtkWidget *widget __attribute__((unused)), + GdkEventSelection *event __attribute__((unused))) { + gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), cb_obj, selectionClearID); + gdk_threads_enter (); + return TRUE; } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c index 1d3f0f3eb..1b8cdb2fd 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c @@ -38,6 +38,7 @@ exception statement from your version. */ #include "gtkpeer.h" #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" + #include <gtk/gtkprivate.h> #include <gdk/gdkkeysyms.h> @@ -405,7 +406,6 @@ awt_keycode_to_keysym (jint keyCode, jint keyLocation) } } - JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor (JNIEnv *env, jobject obj, jint type) @@ -415,6 +415,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor GdkCursorType gdk_cursor_type; GdkCursor *gdk_cursor; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); switch (type) @@ -462,8 +464,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor gdk_cursor_type = GDK_LEFT_PTR; } - gdk_threads_enter (); - widget = GTK_WIDGET(ptr); gdk_cursor = gdk_cursor_new (gdk_cursor_type); @@ -482,11 +482,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetParent GtkWidget *widget; GtkWidget *parent_widget; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); parent_ptr = NSA_GET_PTR (env, parent); - gdk_threads_enter (); - widget = GTK_WIDGET (ptr); parent_widget = GTK_WIDGET (parent_ptr); @@ -527,10 +527,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetSensitive { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gtk_widget_set_sensitive (GTK_WIDGET (ptr), sensitive); gdk_threads_leave (); @@ -542,10 +542,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRequestFocus { void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); gtk_widget_grab_focus (GTK_WIDGET (ptr)); + gdk_threads_leave (); } @@ -564,10 +566,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent gint n_keys = 0; guint lookup_keyval = 0; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + if (id == AWT_KEY_PRESSED) event = gdk_event_new (GDK_KEY_PRESS); else if (id == AWT_KEY_RELEASED) @@ -679,11 +681,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen void *ptr; jint *point; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); point = (*env)->GetIntArrayElements (env, jpoint, 0); - gdk_threads_enter (); - gdk_window_get_origin (GTK_WIDGET (ptr)->window, point, point+1); if (!GTK_IS_CONTAINER (ptr)) @@ -692,9 +694,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen *(point+1) += GTK_WIDGET(ptr)->allocation.y; } - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); + + gdk_threads_leave (); } /* @@ -708,21 +710,21 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetDimensions jint *dims; GtkRequisition requisition; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); dims = (*env)->GetIntArrayElements (env, jdims, 0); dims[0] = dims[1] = 0; - gdk_threads_enter (); - gtk_widget_size_request (GTK_WIDGET (ptr), &requisition); dims[0] = requisition.width; dims[1] = requisition.height; - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements (env, jdims, dims, 0); + + gdk_threads_leave (); } /* @@ -737,13 +739,13 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions GtkRequisition current_req; GtkRequisition natural_req; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); dims = (*env)->GetIntArrayElements (env, jdims, 0); dims[0] = dims[1] = 0; - gdk_threads_enter (); - /* Widgets that extend GtkWindow such as GtkFileChooserDialog may have a default size. These values seem more useful then the natural requisition values, particularly for GtkFileChooserDialog. */ @@ -772,9 +774,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions dims[1] = natural_req.height; } - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements (env, jdims, dims, 0); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -784,10 +786,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds GtkWidget *widget; void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + widget = GTK_WIDGET (ptr); /* We assume that -1 is a width or height and not a request for the @@ -819,11 +821,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground int *rgb; GdkColor bg; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); bg = GTK_WIDGET (ptr)->style->bg[GTK_STATE_NORMAL]; - gdk_threads_leave (); array = (*env)->NewIntArray (env, 3); rgb = (*env)->GetIntArrayElements (env, array, NULL); @@ -833,6 +835,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground rgb[2] = bg.blue >> 8; (*env)->ReleaseIntArrayElements (env, array, rgb, 0); + gdk_threads_leave (); + return array; } @@ -845,11 +849,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground jint *rgb; GdkColor fg; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); fg = GTK_WIDGET (ptr)->style->fg[GTK_STATE_NORMAL]; - gdk_threads_leave (); array = (*env)->NewIntArray (env, 3); rgb = (*env)->GetIntArrayElements (env, array, NULL); @@ -859,6 +863,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground rgb[2] = fg.blue >> 8; (*env)->ReleaseIntArrayElements (env, array, rgb, 0); + gdk_threads_leave (); + return array; } @@ -871,6 +877,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetBackground GtkWidget *widget; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); normal_color.red = (red / 255.0) * 65535; @@ -883,8 +891,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetBackground active_color.green = 0.85 * (green / 255.0) * 65535; active_color.blue = 0.85 * (blue / 255.0) * 65535; - gdk_threads_enter (); - widget = find_bg_color_widget (GTK_WIDGET (ptr)); gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &normal_color); @@ -902,14 +908,14 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetForeground GtkWidget *widget; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); color.red = (red / 255.0) * 65535; color.green = (green / 255.0) * 65535; color.blue = (blue / 255.0) * 65535; - gdk_threads_enter (); - widget = find_fg_color_widget (GTK_WIDGET (ptr)); gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &color); @@ -925,10 +931,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show { void *ptr; + gdk_threads_enter(); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter(); gtk_widget_show (GTK_WIDGET (ptr)); + gdk_threads_leave(); } @@ -938,10 +946,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide { void *ptr; + gdk_threads_enter(); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter(); gtk_widget_hide (GTK_WIDGET (ptr)); + gdk_threads_leave(); } @@ -952,10 +962,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled void *ptr; jboolean ret_val; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); ret_val = GTK_WIDGET_IS_SENSITIVE (GTK_WIDGET (ptr)); + gdk_threads_leave (); return ret_val; @@ -968,13 +980,15 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isRealized void *ptr; jboolean ret_val; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); if (ptr == NULL) return FALSE; - gdk_threads_enter (); ret_val = GTK_WIDGET_REALIZED (GTK_WIDGET (ptr)); + gdk_threads_leave (); return ret_val; @@ -988,8 +1002,10 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_modalHasGrab jboolean retval; gdk_threads_enter (); + widget = gtk_grab_get_current (); retval = (widget && GTK_IS_WINDOW (widget) && GTK_WINDOW (widget)->modal); + gdk_threads_leave (); return retval; @@ -1001,14 +1017,12 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals { void *ptr; jobject *gref; - ptr = NSA_GET_PTR (env, obj); gref = NSA_GET_GLOBAL_REF (env, obj); gdk_threads_enter (); /* Connect EVENT signal, which happens _before_ any specific signal. */ - g_signal_connect (GTK_OBJECT (ptr), "event", G_CALLBACK (pre_event_handler), *gref); @@ -1024,6 +1038,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals gdk_threads_leave (); } +/* FIXME: these functions should be implemented by overridding the + appropriate GtkComponentPeer methods. */ static GtkWidget * find_fg_color_widget (GtkWidget *widget) { @@ -1055,25 +1071,31 @@ focus_in_cb (GtkWidget *widget __attribute((unused)), jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postFocusEventID, - AWT_FOCUS_GAINED, - JNI_FALSE); + postFocusEventID, + AWT_FOCUS_GAINED, + JNI_FALSE); + gdk_threads_enter (); + return FALSE; } static gboolean focus_out_cb (GtkWidget *widget __attribute((unused)), - GdkEventFocus *event __attribute((unused)), - jobject peer) + GdkEventFocus *event __attribute((unused)), + jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postFocusEventID, - AWT_FOCUS_LOST, - JNI_FALSE); + postFocusEventID, + AWT_FOCUS_LOST, + JNI_FALSE); + gdk_threads_enter (); + return FALSE; } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c index 3fa0c21e6..563a0257e 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c @@ -47,10 +47,10 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create GtkWidget *window; GtkWidget *fixed; - NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); + window = gtk_plug_new ((GdkNativeWindow) socket_id); fixed = gtk_fixed_new (); @@ -58,9 +58,9 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create gtk_widget_show (fixed); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, window); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -69,10 +69,10 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_construct { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + if (GTK_WIDGET_REALIZED (GTK_WIDGET (ptr))) g_printerr ("ERROR: GtkPlug is already realized\n"); diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c index 85fe3dd6c..d5400b318 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c @@ -40,9 +40,9 @@ exception statement from your version. */ #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" #include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h" -static void handle_response (GtkDialog *dialog, - gint responseId, - jobject peer_obj); +static void handle_response_cb (GtkDialog *dialog, + gint responseId, + jobject peer_obj); /* * Make a new file selection dialog @@ -55,13 +55,13 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create void *parentp; gpointer widget; + gdk_threads_enter (); + /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); parentp = NSA_GET_PTR(env, parent); - gdk_threads_enter (); - /* FIXME: we should be using the default gnome-vfs backend but it is not currently thread-safe. See: http://bugzilla.gnome.org/show_bug.cgi?id=166852 */ @@ -79,31 +79,34 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create /* We must add this window to the group so input in the others are disable while it is being shown */ - gtk_window_group_add_window (global_gtk_window_group, GTK_WINDOW (widget)); - - gdk_threads_leave (); + gtk_window_group_add_window (global_gtk_window_group, + GTK_WINDOW (widget)); NSA_SET_PTR (env, obj, widget); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectSignals (JNIEnv *env, jobject obj) { - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); - g_assert (gref); + void *ptr = NULL; + jobject *gref = NULL; gdk_threads_enter (); - g_signal_connect (G_OBJECT (GTK_DIALOG (ptr)), - "response", - GTK_SIGNAL_FUNC (handle_response), *gref); + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); - gdk_threads_leave (); + /* FileDialog signals */ + g_signal_connect (G_OBJECT (ptr), "response", + GTK_SIGNAL_FUNC (handle_response_cb), *gref); + + /* Component signals */ + classpath_gtk_component_connect_signals (G_OBJECT (ptr), gref); - /* Connect the superclass signals. */ - Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj); + gdk_threads_leave (); } JNIEXPORT jstring JNICALL @@ -113,10 +116,10 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeGetDirectory void *ptr; const char *str; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + str = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(ptr)); gdk_threads_leave (); @@ -144,7 +147,9 @@ static gboolean filenameFilterCallback (const GtkFileFilterInfo *filter_info, filename = (*gdk_env())->NewStringUTF(gdk_env(), filter_info->filename); gdk_threads_leave(); + accepted = (*gdk_env())->CallBooleanMethod(gdk_env(), obj, id, filename); + gdk_threads_enter(); return accepted; @@ -157,10 +162,10 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter void *ptr; GtkFileFilter *filter; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + filter = gtk_file_filter_new(); gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME, filenameFilterCallback, obj, NULL); @@ -177,15 +182,17 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetDirectory void *ptr; const char *str; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); str = (*env)->GetStringUTFChars (env, directory, 0); - gdk_threads_enter (); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(ptr), str); - gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, directory, str); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -195,21 +202,23 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile void *ptr; const char *str; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); str = (*env)->GetStringUTFChars (env, filename, 0); - gdk_threads_enter (); gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (ptr), str); - gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, filename, str); + + gdk_threads_leave (); } static void -handle_response (GtkDialog *dialog __attribute__((unused)), - gint responseId, - jobject peer_obj) +handle_response_cb (GtkDialog *dialog __attribute__((unused)), + gint responseId, + jobject peer_obj) { static int isDisposeIDSet = 0; static int isIDSet = 0; @@ -237,13 +246,12 @@ handle_response (GtkDialog *dialog __attribute__((unused)), disposeID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkDisposeFileDialog", "()V"); isDisposeIDSet = 1; } - - gdk_threads_leave (); /* We can dispose of the dialog now (and unblock show) */ + gdk_threads_leave (); (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, disposeID); - gdk_threads_enter (); + return; } @@ -260,10 +268,9 @@ handle_response (GtkDialog *dialog __attribute__((unused)), "gtkSetFilename", "(Ljava/lang/String;)V"); isIDSet = 1; } - - gdk_threads_leave (); - + /* Set the Java object field 'file' with this value. */ + gdk_threads_leave (); (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, gtkSetFilenameID, str_fileName); /* We can hide the dialog now (and unblock show) */ diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c index 6be6841d3..9fb43a57b 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c @@ -51,10 +51,10 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer void *fixed; GList* children; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data; children = gtk_container_get_children (GTK_CONTAINER (fixed)); @@ -86,11 +86,11 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer void *mptr; void *fixed; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); mptr = NSA_GET_PTR (env, menubar); - gdk_threads_enter (); - fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data; gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0); gtk_widget_show (mptr); @@ -105,10 +105,10 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight GtkWidget *ptr; GtkRequisition requisition; - ptr = NSA_GET_PTR (env, menubar); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, menubar); + gtk_widget_size_request (ptr, &requisition); gdk_threads_leave (); @@ -123,10 +123,10 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth GtkWidget *ptr; GtkRequisition natural_req; - ptr = NSA_GET_PTR (env, menubar); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, menubar); + /* Get the menubar's natural size request. */ gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1); gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req); @@ -145,10 +145,10 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkFixedSetVisible void *ptr; void *fixed; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data; if (visible) @@ -164,14 +164,15 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImage (JNIEnv *env, jobject obj, jobject gtkimage) { void *ptr; - GdkPixbuf *pixbuf = gnu_java_awt_peer_gtk_GtkImage_getPixbuf(env, gtkimage); + GdkPixbuf *pixbuf = NULL; + gdk_threads_enter (); + + pixbuf = gnu_java_awt_peer_gtk_GtkImage_getPixbuf(env, gtkimage); g_assert (pixbuf != NULL); ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf); /* if the GtkImage is offscreen, this is a temporary pixbuf which should @@ -181,5 +182,3 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImage gdk_threads_leave (); } - - diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c index 7e8a07a7d..9a3ab9364 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c @@ -45,20 +45,20 @@ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + /* For now the native state for any object must be a widget. However, a subclass could override dispose() if required. */ gtk_widget_destroy (GTK_WIDGET (ptr)); - gdk_threads_leave (); - /* Remove entries from state tables */ NSA_DEL_GLOBAL_REF (env, obj); NSA_DEL_PTR (env, obj); + gdk_threads_leave (); + /* * Wake up the main thread, to make sure it re-checks the window * destruction condition. @@ -75,12 +75,12 @@ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont void *ptr; PangoFontDescription *font_desc; + gdk_threads_enter(); + ptr = NSA_GET_PTR (env, obj); font_name = (*env)->GetStringUTFChars (env, name, NULL); - gdk_threads_enter(); - font_desc = pango_font_description_from_string (font_name); pango_font_description_set_size (font_desc, size * dpi_conversion_factor); @@ -94,7 +94,7 @@ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont pango_font_description_free (font_desc); - gdk_threads_leave(); - (*env)->ReleaseStringUTFChars (env, name, font_name); + + gdk_threads_leave(); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c index c1da54c43..e6c1dbe15 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c @@ -64,6 +64,8 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf int width, height; GdkPixbuf *pixbuf; + gdk_threads_enter (); + /* Don't use the JCL convert function because it throws an exception on failure */ filename = (*env)->GetStringUTFChars (env, name, 0); @@ -71,23 +73,23 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf if (filename == NULL) return JNI_FALSE; - gdk_threads_enter (); - pixbuf = gdk_pixbuf_new_from_file (filename, NULL); if (pixbuf == NULL) { - gdk_threads_leave (); (*env)->ReleaseStringUTFChars (env, name, filename); + gdk_threads_leave (); return JNI_FALSE; } width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); - gdk_threads_leave (); createRawData (env, obj, pixbuf); setWidthHeight(env, obj, width, height); (*env)->ReleaseStringUTFChars (env, name, filename); + + gdk_threads_leave (); + return JNI_TRUE; } @@ -143,10 +145,11 @@ Java_gnu_java_awt_peer_gtk_GtkImage_getPixels(JNIEnv *env, jobject obj) if (offScreen (env, obj) == JNI_TRUE) gdk_pixbuf_unref (pixbuf); + + (*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0); gdk_threads_leave (); - (*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0); return result_array; } @@ -181,9 +184,9 @@ Java_gnu_java_awt_peer_gtk_GtkImage_setPixels(JNIEnv *env, jobject obj, pixeldata += rowstride; } - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements (env, pixels, src_array_iter, 0); + + gdk_threads_leave (); } /** @@ -196,6 +199,8 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap(JNIEnv *env, jobject obj) jclass cls; jfieldID field; + gdk_threads_enter (); + cls = (*env)->GetObjectClass (env, obj); field = (*env)->GetFieldID (env, cls, "width", "I"); g_assert (field != 0); @@ -205,7 +210,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createPixmap(JNIEnv *env, jobject obj) g_assert (field != 0); height = (*env)->GetIntField (env, obj, field); - gdk_threads_enter (); if (offScreen (env, obj) == JNI_FALSE) createRawData (env, obj, gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, @@ -251,6 +255,8 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap(JNIEnv *env, GdkPixbuf *pixbuf; + gdk_threads_enter (); + cls = (*env)->GetObjectClass (env, destination); field = (*env)->GetFieldID (env, cls, "width", "I"); g_assert (field != 0); @@ -260,8 +266,6 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap(JNIEnv *env, g_assert (field != 0); height = (*env)->GetIntField (env, destination, field); - gdk_threads_enter (); - pixbuf = gnu_java_awt_peer_gtk_GtkImage_getPixbuf(env, source); dst = gdk_pixbuf_scale_simple(pixbuf, @@ -271,9 +275,9 @@ Java_gnu_java_awt_peer_gtk_GtkImage_createScaledPixmap(JNIEnv *env, if (offScreen (env, source) == JNI_TRUE) gdk_pixbuf_unref (pixbuf); - gdk_threads_leave (); - createRawData (env, destination, (void *)dst); + + gdk_threads_leave (); } /** @@ -290,11 +294,11 @@ Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaled struct graphics *g; guint32 bgColor; + gdk_threads_enter (); + bgColor = ((bg_red & 0xFF) << 16) | ((bg_green & 0xFF) << 8) | (bg_blue & 0xFF); - gdk_threads_enter (); - g = (struct graphics *) NSA_GET_PTR (env, gc_obj); if (!g || !GDK_IS_DRAWABLE (g->drawable)) @@ -363,11 +367,11 @@ Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped struct graphics *g; guint32 bgColor; + gdk_threads_enter (); + bgColor = ((bg_red & 0xFF) << 16) | ((bg_green & 0xFF) << 8) | (bg_blue & 0xFF); - gdk_threads_enter (); - g = (struct graphics *) NSA_GET_PTR (env, gc_obj); if (!g || !GDK_IS_DRAWABLE (g->drawable)) @@ -446,6 +450,7 @@ Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped GDK_RGB_DITHER_NORMAL, 0, 0); gdk_pixbuf_unref (dst); + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c index befa26548..fc785d87d 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c @@ -47,23 +47,23 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create GtkWidget *eventbox; const char *str; + gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, text, 0); - gdk_threads_enter (); - eventbox = gtk_event_box_new (); label = gtk_label_new (str); gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5); gtk_container_add (GTK_CONTAINER (eventbox), label); gtk_widget_show (label); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, text, str); NSA_SET_PTR (env, obj, eventbox); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -75,12 +75,12 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont GtkWidget *label; PangoFontDescription *font_desc; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); font_name = (*env)->GetStringUTFChars (env, name, NULL); - gdk_threads_enter (); - label = gtk_bin_get_child (GTK_BIN (ptr)); if (!label) @@ -99,9 +99,9 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont pango_font_description_free (font_desc); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, name, font_name); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -112,19 +112,19 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setText void *ptr; GtkWidget *label; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); str = (*env)->GetStringUTFChars (env, text, 0); - gdk_threads_enter (); - label = gtk_bin_get_child (GTK_BIN (ptr)); gtk_label_set_label (GTK_LABEL (label), str); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, text, str); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -134,10 +134,10 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_nativeSetAlignment void *ptr; GtkWidget *label; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + label = gtk_bin_get_child (GTK_BIN(ptr)); gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5); @@ -152,10 +152,10 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_setNativeBounds GtkWidget *widget; void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + widget = GTK_WIDGET (ptr); /* We assume that -1 is a width or height and not a request for the diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c index 1483147dc..c864d1283 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c @@ -44,16 +44,13 @@ enum N_COLUMNS }; -gboolean item_highlighted (GtkTreeSelection *selection, - GtkTreeModel *model, - GtkTreePath *path, - gboolean path_currently_selected, - jobject peer); +static gboolean item_highlighted_cb (GtkTreeSelection *selection, + GtkTreeModel *model, + GtkTreePath *path, + gboolean path_currently_selected, + jobject peer); -#define TREE_VIEW_FROM_SW(obj) \ - (GTK_TREE_VIEW (GTK_SCROLLED_WINDOW (obj)->container.child)) - JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkListPeer_create (JNIEnv *env, jobject obj, jint rows) @@ -67,11 +64,11 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create GtkRequisition req; gint i; + gdk_threads_enter (); + /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING); /* Add the number of rows so that we can calculate the tree view's size request. */ @@ -111,9 +108,9 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create gtk_widget_show (list); gtk_widget_show (sw); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, sw); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -122,25 +119,22 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals { void *ptr; jobject *gref; - GtkTreeView *list; + GtkWidget *list; GtkTreeSelection *selection; - ptr = NSA_GET_PTR (env, obj); - gref = NSA_GET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - g_assert (gref); - - list = TREE_VIEW_FROM_SW (ptr); + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); - g_signal_connect (G_OBJECT (list), "event", - G_CALLBACK (pre_event_handler), *gref); + list = gtk_bin_get_child (GTK_BIN (ptr)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); - gtk_tree_selection_set_select_function (selection, item_highlighted, + gtk_tree_selection_set_select_function (selection, item_highlighted_cb, *gref, NULL); + classpath_gtk_component_connect_signals (G_OBJECT (list), gref); + gdk_threads_leave (); } @@ -153,11 +147,11 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont GtkWidget *list; PangoFontDescription *font_desc; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter(); - list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr)); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); font_name = (*env)->GetStringUTFChars (env, name, NULL); @@ -186,11 +180,11 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetRequestFocus void *ptr; GtkWidget *list; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr)); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); gtk_widget_grab_focus (list); gdk_threads_leave (); @@ -201,20 +195,20 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_append (JNIEnv *env, jobject obj, jobjectArray items) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreeIter iter; GtkTreeModel *list_store; jint count; jint i; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); count = (*env)->GetArrayLength (env, items); - gdk_threads_enter (); - - list = TREE_VIEW_FROM_SW (ptr); - list_store = gtk_tree_view_get_model (list); + list = gtk_bin_get_child (GTK_BIN (ptr)); + list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); for (i = 0; i < count; i++) { @@ -240,17 +234,17 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_add { void *ptr; const char *str; - GtkTreeView *list; + GtkWidget *list; GtkTreeIter iter; GtkTreeModel *list_store; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); str = (*env)->GetStringUTFChars (env, text, NULL); - gdk_threads_enter (); - - list = TREE_VIEW_FROM_SW (ptr); - list_store = gtk_tree_view_get_model (list); + list = gtk_bin_get_child (GTK_BIN (ptr)); + list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); if (index == -1) gtk_list_store_append (GTK_LIST_STORE (list_store), &iter); @@ -260,9 +254,9 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_add gtk_list_store_set (GTK_LIST_STORE (list_store), &iter, COLUMN_STRING, str, -1); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, text, str); + + gdk_threads_leave (); } @@ -271,18 +265,18 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems (JNIEnv *env, jobject obj, jint start, jint end) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreeIter iter; GtkTreeModel *list_store; jint i; jint num_items; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = TREE_VIEW_FROM_SW (ptr); - list_store = gtk_tree_view_get_model (list); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); + list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); /* Special case: remove all rows. */ if (end == -1) @@ -307,16 +301,16 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_select (JNIEnv *env, jobject obj, jint index) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreePath *path; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = TREE_VIEW_FROM_SW (ptr); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); path = gtk_tree_path_new_from_indices (index, -1); - gtk_tree_view_set_cursor (list, path, NULL, FALSE); + gtk_tree_view_set_cursor (GTK_TREE_VIEW (list), path, NULL, FALSE); gdk_threads_leave (); } @@ -326,16 +320,16 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_deselect (JNIEnv *env, jobject obj, jint index) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreeSelection *selection; GtkTreePath *path; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = TREE_VIEW_FROM_SW (ptr); - selection = gtk_tree_view_get_selection (list); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); path = gtk_tree_path_new_from_indices (index, -1); gtk_tree_selection_unselect_path (selection, path); @@ -351,13 +345,13 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize GtkRequisition current_req; GtkRequisition natural_req; + gdk_threads_enter (); + dims = (*env)->GetIntArrayElements (env, jdims, NULL); dims[0] = dims[1] = 0; ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - /* Save the widget's current size request. */ gtk_widget_size_request (GTK_WIDGET (ptr), ¤t_req); @@ -381,9 +375,9 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize else dims[1] = natural_req.height / visible_rows * rows; - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements (env, jdims, dims, 0); + + gdk_threads_leave (); } @@ -392,7 +386,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes (JNIEnv *env, jobject obj) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreeSelection *selection; jintArray result_array; jint *result_array_iter; @@ -402,12 +396,12 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes jint count; jint i; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = TREE_VIEW_FROM_SW (ptr); - selection = gtk_tree_view_get_selection (list); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); count = gtk_tree_selection_count_selected_rows (selection); if (count > 0) { @@ -429,16 +423,14 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes g_list_free (rows); } - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0); - - return result_array; } else - gdk_threads_leave (); + result_array = NULL; - return (jintArray) NULL; + gdk_threads_leave (); + + return result_array; } JNIEXPORT void JNICALL @@ -446,16 +438,17 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_makeVisible (JNIEnv *env, jobject obj, jint index) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreePath *path; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = TREE_VIEW_FROM_SW (ptr); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); path = gtk_tree_path_new_from_indices (index, -1); - gtk_tree_view_scroll_to_cell (list, path, NULL, FALSE, 0.0, 0.0); + gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (list), path, + NULL, FALSE, 0.0, 0.0); gdk_threads_leave (); } @@ -465,15 +458,15 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_setMultipleMode (JNIEnv *env, jobject obj, jboolean mode) { void *ptr; - GtkTreeView *list; + GtkWidget *list; GtkTreeSelection *selection; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); - list = TREE_VIEW_FROM_SW (ptr); - selection = gtk_tree_view_get_selection (list); + ptr = NSA_GET_PTR (env, obj); + + list = gtk_bin_get_child (GTK_BIN (ptr)); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); gtk_tree_selection_set_mode (selection, mode ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); @@ -481,12 +474,12 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_setMultipleMode gdk_threads_leave (); } -gboolean -item_highlighted (GtkTreeSelection *selection __attribute__((unused)), - GtkTreeModel *model, - GtkTreePath *path, - gboolean path_currently_selected, - jobject peer) +static gboolean +item_highlighted_cb (GtkTreeSelection *selection __attribute__((unused)), + GtkTreeModel *model, + GtkTreePath *path, + gboolean path_currently_selected, + jobject peer) { GtkTreeIter iter; jint row; @@ -498,15 +491,23 @@ item_highlighted (GtkTreeSelection *selection __attribute__((unused)), row = indices ? indices[0] : -1; if (!path_currently_selected) - (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postListItemEventID, - row, - (jint) AWT_ITEM_SELECTED); + { + gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, + postListItemEventID, + row, + (jint) AWT_ITEM_SELECTED); + gdk_threads_enter (); + } else - (*gdk_env())->CallVoidMethod (gdk_env(), peer, - postListItemEventID, - row, - (jint) AWT_ITEM_DESELECTED); + { + gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, + postListItemEventID, + row, + (jint) AWT_ITEM_DESELECTED); + gdk_threads_enter (); + } } return TRUE; diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c index 0a88f645b..3e21a0402 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c @@ -45,16 +45,16 @@ Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create { GtkWidget *widget; - NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); + widget = gtk_menu_bar_new (); gtk_widget_show (widget); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, widget); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -63,11 +63,13 @@ Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu { void *mbar, *menu; + gdk_threads_enter (); + mbar = NSA_GET_PTR (env, obj); menu = NSA_GET_PTR (env, menupeer); - gdk_threads_enter (); gtk_menu_shell_append (GTK_MENU_SHELL (mbar), GTK_WIDGET (menu)); + gdk_threads_leave (); } @@ -79,10 +81,11 @@ Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu void *mbar, *menu; GList *list; + gdk_threads_enter (); + mbar = NSA_GET_PTR (env, obj); menu = NSA_GET_PTR (env, menupeer); - gdk_threads_enter (); if (helpmenu != NULL) { list = gtk_container_children (GTK_CONTAINER (mbar)); @@ -92,6 +95,7 @@ Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu gtk_container_remove (GTK_CONTAINER (mbar), GTK_WIDGET (list->data)); } helpmenu = menu; + gdk_threads_leave (); } @@ -102,11 +106,13 @@ Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu void *ptr; GList *list; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); list = gtk_container_children (GTK_CONTAINER (ptr)); list = g_list_nth (list, index); gtk_container_remove (GTK_CONTAINER (ptr), GTK_WIDGET (list->data)); + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c index 76850c814..5bd4ba0a1 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c @@ -40,8 +40,8 @@ exception statement from your version. */ #include "gnu_java_awt_peer_gtk_GtkMenuItemPeer.h" #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" -static void item_activate (GtkMenuItem *item __attribute__((unused)), - jobject peer_obj); +static void item_activate_cb (GtkMenuItem *item __attribute__((unused)), + jobject peer_obj); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create @@ -50,12 +50,12 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create GtkWidget *widget; const char *str; + gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL); - gdk_threads_enter (); - /* "-" signals that we need a separator. */ if (strcmp (str, "-") == 0) widget = gtk_menu_item_new (); @@ -64,25 +64,27 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create gtk_widget_show (widget); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, label, str); NSA_SET_PTR (env, obj, widget); + + gdk_threads_leave (); } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals (JNIEnv *env, jobject obj) { - void *ptr = NSA_GET_PTR (env, obj); - jobject *gref = NSA_GET_GLOBAL_REF (env, obj); - g_assert (gref); + void *ptr; + jobject *gref; gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); + g_signal_connect (G_OBJECT (ptr), "activate", - G_CALLBACK (item_activate), *gref); + G_CALLBACK (item_activate_cb), *gref); gdk_threads_leave (); } @@ -96,12 +98,12 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_gtkWidgetModifyFont GtkWidget *label; PangoFontDescription *font_desc; + gdk_threads_enter(); + ptr = NSA_GET_PTR (env, obj); font_name = (*env)->GetStringUTFChars (env, name, NULL); - gdk_threads_enter(); - label = gtk_bin_get_child (GTK_BIN (ptr)); if (label) @@ -120,9 +122,9 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_gtkWidgetModifyFont pango_font_description_free (font_desc); } - gdk_threads_leave(); - (*env)->ReleaseStringUTFChars (env, name, font_name); + + gdk_threads_leave(); } JNIEXPORT void JNICALL @@ -131,10 +133,12 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setEnabled { void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); gtk_widget_set_sensitive (GTK_WIDGET (ptr), enabled); + gdk_threads_leave (); } @@ -146,25 +150,27 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setLabel const char *str; GtkAccelLabel *accel_label; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL); - gdk_threads_enter (); - accel_label = GTK_ACCEL_LABEL (GTK_BIN (ptr)->child); gtk_label_set_text (GTK_LABEL (accel_label), str); gtk_accel_label_refetch (accel_label); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, label, str); + + gdk_threads_leave (); } static void -item_activate (GtkMenuItem *item __attribute__((unused)), jobject peer_obj) +item_activate_cb (GtkMenuItem *item __attribute__((unused)), jobject peer_obj) { + gdk_threads_leave (); (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, - postMenuActionEventID); + postMenuActionEventID); + gdk_threads_enter (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c index 21c738ca5..e86acfc1d 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c @@ -45,9 +45,10 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup { void *ptr1, *ptr2; + gdk_threads_enter (); + ptr1 = NSA_GET_PTR (env, obj); - gdk_threads_enter (); if (!parent) { gtk_menu_set_accel_group (GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu), @@ -75,12 +76,12 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create GtkWidget *menu_title, *menu, *toplevel; const char *str; + gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL); - gdk_threads_enter (); - menu = gtk_menu_new (); if (str != NULL) @@ -102,9 +103,9 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create NSA_SET_PTR (env, obj, menu_title); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, label, str); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -114,10 +115,10 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addTearOff void *ptr1; GtkWidget *menu, *item; - ptr1 = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr1 = NSA_GET_PTR (env, obj); + menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (ptr1)); item = gtk_tearoff_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); @@ -133,11 +134,11 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem void *ptr1, *ptr2; GtkWidget *menu; + gdk_threads_enter (); + ptr1 = NSA_GET_PTR (env, obj); ptr2 = NSA_GET_PTR (env, menuitempeer); - gdk_threads_enter (); - menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(ptr1)); gtk_menu_shell_append (GTK_MENU_SHELL(menu), GTK_WIDGET (ptr2)); @@ -160,13 +161,13 @@ Java_gnu_java_awt_peer_gtk_GtkMenuPeer_delItem void *ptr; GList *list; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); list = gtk_container_children (GTK_CONTAINER (ptr)); list = g_list_nth (list, index); gtk_container_remove (GTK_CONTAINER (ptr), GTK_WIDGET (list->data)); + gdk_threads_leave (); } - - diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c index 98108ad74..934dde1ed 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c @@ -53,19 +53,19 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create { GtkWidget *widget; - NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); + widget = gtk_fixed_new (); gtk_fixed_set_has_window (GTK_FIXED (widget), TRUE); GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, widget); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -75,22 +75,20 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals void *ptr; jobject *gref; - ptr = NSA_GET_PTR (env, obj); - gref = NSA_GET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - g_signal_connect (GTK_OBJECT (ptr), "event", - G_CALLBACK (pre_event_handler), *gref); + ptr = NSA_GET_PTR (env, obj); + gref = NSA_GET_GLOBAL_REF (env, obj); + /* Panel signals. These callbacks prevent expose events being + delivered to the panel when it is focused. */ g_signal_connect (G_OBJECT (ptr), "focus-in-event", G_CALLBACK (panel_focus_in_cb), *gref); g_signal_connect (G_OBJECT (ptr), "focus-out-event", G_CALLBACK (panel_focus_out_cb), *gref); - g_signal_connect_after (G_OBJECT (ptr), "realize", - G_CALLBACK (connect_awt_hook_cb), *gref); + classpath_gtk_component_connect_nonfocus_signals (G_OBJECT (ptr), gref); gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c index 70ebbb796..e684a090f 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c @@ -65,18 +65,20 @@ Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show void *ptr; struct pos *p; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); p = g_malloc (sizeof (struct pos)); p->x = x; p->y = y; - gdk_threads_enter (); gtk_menu_popup (GTK_MENU (GTK_MENU_ITEM (ptr)->submenu), NULL, NULL, menu_pos, p, 0, time); - gdk_threads_leave (); g_free (p); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -86,10 +88,11 @@ Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup void *ptr1, *ptr2; GtkMenu *menu; + gdk_threads_enter (); + ptr1 = NSA_GET_PTR (env, obj); ptr2 = NSA_GET_PTR (env, parent); - gdk_threads_enter (); menu = GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu); gtk_menu_set_accel_group (menu, gtk_accel_group_new ()); /* FIXME: update this to use GTK-2.4 GtkActions. */ @@ -97,5 +100,6 @@ Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_setupAccelGroup _gtk_accel_group_attach (gtk_menu_get_accel_group (menu), G_OBJECT (gtk_widget_get_toplevel (ptr2))); #endif + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c index 474d334d9..6ecfb8166 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c @@ -45,18 +45,18 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create { GtkWidget *sw; + gdk_threads_enter (); + /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - sw = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (sw, width, height); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, sw); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -67,9 +67,10 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setScrollPosition GtkScrolledWindow *sw; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); sw = GTK_SCROLLED_WINDOW (ptr); hadj = gtk_scrolled_window_get_hadjustment (sw); @@ -77,6 +78,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setScrollPosition gtk_adjustment_set_value (hadj, x); gtk_adjustment_set_value (vadj, y); + gdk_threads_leave (); } @@ -88,9 +90,10 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetHScrollIncremen GtkScrolledWindow *sw; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); sw = GTK_SCROLLED_WINDOW(ptr); hadj = gtk_scrolled_window_get_hadjustment (sw); @@ -107,9 +110,10 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetVScrollIncremen GtkScrolledWindow *sw; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); sw = GTK_SCROLLED_WINDOW(ptr); vadj = gtk_scrolled_window_get_hadjustment (sw); @@ -128,9 +132,10 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getHScrollbarHeight jint height = 0; jint spacing = 0; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); sw = GTK_SCROLLED_WINDOW (ptr); gtk_widget_size_request (sw->hscrollbar, &requisition); @@ -152,9 +157,10 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getVScrollbarWidth jint width = 0; jint spacing = 0; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); sw = GTK_SCROLLED_WINDOW (ptr); gtk_widget_size_request (sw->vscrollbar, &requisition); @@ -172,6 +178,8 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setPolicy { void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); switch (policy) @@ -187,7 +195,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setPolicy break; } - gdk_threads_enter (); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ptr), policy, policy); + gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c index df2b16f8e..605e9d52e 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c @@ -455,9 +455,13 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { jboolean empty = FALSE; + gdk_threads_enter (); + empty = ! gtk_events_pending(); + gdk_threads_leave (); + return empty; } @@ -470,7 +474,9 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_beep (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { gdk_threads_enter (); + gdk_beep (); + gdk_threads_leave (); } @@ -479,7 +485,9 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_sync (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))) { gdk_threads_enter (); + gdk_flush (); + gdk_threads_leave (); } @@ -511,6 +519,7 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenResolution res = gdk_screen_width () / (gdk_screen_width_mm () / 25.4); gdk_threads_leave (); + return res; } @@ -525,10 +534,10 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors jint *colors; GtkStyle *style; - colors = (*env)->GetIntArrayElements (env, jcolors, 0); - gdk_threads_enter (); + colors = (*env)->GetIntArrayElements (env, jcolors, 0); + style = gtk_widget_get_default_style (); colors[AWT_DESKTOP] = CONVERT (bg, SELECTED); @@ -558,9 +567,9 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors colors[AWT_INFO] = CONVERT (bg, NORMAL); colors[AWT_INFO_TEXT] = CONVERT (fg, NORMAL); - gdk_threads_leave (); - (*env)->ReleaseIntArrayElements(env, jcolors, colors, 0); + + gdk_threads_leave (); } #undef CONVERT diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index c412cb947..d5681f585 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -104,10 +104,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create void *window_parent; GtkWidget *fixed; - NSA_SET_GLOBAL_REF (env, obj); - gdk_threads_enter (); + NSA_SET_GLOBAL_REF (env, obj); + window_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = GTK_WINDOW (window_widget); @@ -129,9 +129,9 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create gtk_widget_show (fixed); - gdk_threads_leave (); - NSA_SET_PTR (env, obj, window_widget); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -141,17 +141,17 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetTitle const char *c_title; void *ptr; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); c_title = (*env)->GetStringUTFChars (env, title, NULL); - gdk_threads_enter (); - gtk_window_set_title (GTK_WINDOW (ptr), c_title); - gdk_threads_leave (); - (*env)->ReleaseStringUTFChars (env, title, c_title); + + gdk_threads_leave (); } JNIEXPORT void JNICALL @@ -160,10 +160,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetResizable { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gtk_window_set_policy (GTK_WINDOW (ptr), resizable, resizable, FALSE); gdk_threads_leave (); @@ -175,10 +175,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gtk_window_set_modal (GTK_WINDOW (ptr), modal); gdk_threads_leave (); @@ -190,10 +190,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible { void *ptr; - ptr = NSA_GET_PTR (env, obj); - gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + if (visible) gtk_widget_show (GTK_WIDGET (ptr)); else @@ -211,11 +211,11 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals void *ptr; jobject *gref; + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); gref = NSA_GET_GLOBAL_REF (env, obj); - gdk_threads_enter (); - g_signal_connect (G_OBJECT (ptr), "event", G_CALLBACK (pre_event_handler), *gref); @@ -267,10 +267,11 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env, jobject obj) { void *ptr; - ptr = NSA_GET_PTR (env, obj); - + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gdk_window_lower (GTK_WIDGET (ptr)->window); gdk_flush (); @@ -282,10 +283,11 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, jobject obj) { void *ptr; - ptr = NSA_GET_PTR (env, obj); - + gdk_threads_enter (); + ptr = NSA_GET_PTR (env, obj); + gdk_window_raise (GTK_WIDGET (ptr)->window); gdk_flush (); @@ -307,14 +309,16 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize (JNIEnv *env, jobject obj, jint width, jint height) { - void *ptr = NSA_GET_PTR (env, obj); + void *ptr; + + gdk_threads_enter (); + + ptr = NSA_GET_PTR (env, obj); /* Avoid GTK runtime assertion failures. */ width = (width < 1) ? 1 : width; height = (height < 1) ? 1 : height; - gdk_threads_enter (); - gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height); gdk_threads_leave (); @@ -324,14 +328,16 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) { - void *ptr = NSA_GET_PTR (env, obj); + void *ptr; + + gdk_threads_enter (); + + ptr = NSA_GET_PTR (env, obj); /* Avoid GTK runtime assertion failures. */ width = (width < 1) ? 1 : width; height = (height < 1) ? 1 : height; - gdk_threads_enter (); - gtk_window_move (GTK_WINDOW(ptr), x, y); /* The call to gdk_window_move is needed in addition to the call to gtk_window_move. If gdk_window_move isn't called, then the @@ -354,6 +360,7 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds by the program and the window's "resizable" property is true then the size request will not be honoured. */ gtk_window_resize (GTK_WINDOW (ptr), width, height); + gdk_threads_leave (); } @@ -471,10 +478,12 @@ window_delete_cb (GtkWidget *widget __attribute__((unused)), jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_CLOSING, (jobject) NULL, (jint) 0); + gdk_threads_enter (); /* Prevents that the Window dissappears ("destroy" @@ -490,10 +499,12 @@ window_destroy_cb (GtkWidget *widget __attribute__((unused)), jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_CLOSED, (jobject) NULL, (jint) 0); + gdk_threads_enter (); } @@ -502,10 +513,12 @@ window_show_cb (GtkWidget *widget __attribute__((unused)), jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_OPENED, (jobject) NULL, (jint) 0); + gdk_threads_enter (); } @@ -518,6 +531,7 @@ window_active_state_change_cb (GtkWidget *widget __attribute__((unused)), /* Remove the unused attributes if you fix the below. */ #if 0 gdk_threads_leave (); + if (GTK_WINDOW (widget)->is_active) (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, @@ -528,6 +542,7 @@ window_active_state_change_cb (GtkWidget *widget __attribute__((unused)), postWindowEventID, (jint) AWT_WINDOW_DEACTIVATED, (jobject) NULL, (jint) 0); + gdk_threads_enter (); #endif } @@ -538,6 +553,7 @@ window_focus_state_change_cb (GtkWidget *widget, jobject peer) { gdk_threads_leave (); + if (GTK_WINDOW (widget)->has_toplevel_focus) (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, @@ -548,6 +564,7 @@ window_focus_state_change_cb (GtkWidget *widget, postWindowEventID, (jint) AWT_WINDOW_DEACTIVATED, (jobject) NULL, (jint) 0); + gdk_threads_enter (); } @@ -557,11 +574,14 @@ window_focus_in_cb (GtkWidget * widget __attribute__((unused)), jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_GAINED_FOCUS, (jobject) NULL, (jint) 0); + gdk_threads_enter (); + return FALSE; } @@ -571,11 +591,14 @@ window_focus_out_cb (GtkWidget * widget __attribute__((unused)), jobject peer) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_LOST_FOCUS, (jobject) NULL, (jint) 0); + gdk_threads_enter (); + return FALSE; } @@ -594,20 +617,24 @@ window_window_state_cb (GtkWidget *widget, { /* We've been iconified. */ gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_ICONIFIED, (jobject) NULL, (jint) 0); + gdk_threads_enter (); } else { /* We've been deiconified. */ gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_DEICONIFIED, (jobject) NULL, (jint) 0); + gdk_threads_enter (); } } @@ -622,11 +649,14 @@ window_window_state_cb (GtkWidget *widget, new_state |= window_get_new_state (widget); gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postWindowEventID, (jint) AWT_WINDOW_STATE_CHANGED, (jobject) NULL, new_state); + gdk_threads_enter (); + return TRUE; } @@ -693,12 +723,14 @@ window_property_changed_cb (GtkWidget *widget __attribute__((unused)), gu_ex.gu_extents)) { gdk_threads_leave (); + (*gdk_env())->CallVoidMethod (gdk_env(), peer, postInsetsChangedEventID, (jint) extents[2], /* top */ (jint) extents[0], /* left */ (jint) extents[3], /* bottom */ (jint) extents[1]); /* right */ + gdk_threads_enter (); } |