summaryrefslogtreecommitdiff
path: root/native/jni
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2005-07-11 23:27:42 +0000
committerThomas Fitzsimmons <fitzsim@redhat.com>2005-07-11 23:27:42 +0000
commit956afe1a2245446fad3bd3d0acb3867311f45d13 (patch)
tree51e80bbe33268adda56d11610be88fcaea567772 /native/jni
parent4da31b209a0fe4372bcc99cc3d3951223f98d3d6 (diff)
downloadclasspath-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')
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c20
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c227
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c386
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c17
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c72
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c6
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c9
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c76
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c10
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer.c8
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c12
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c66
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c60
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c55
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c114
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c12
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c75
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c29
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c16
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c37
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c32
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c189
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c20
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c48
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c25
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c20
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c10
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c28
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c17
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c84
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), &current_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 ();
}