Index: gnu/java/awt/peer/gtk/FreetypeGlyphVector.java =================================================================== --- gnu/java/awt/peer/gtk/FreetypeGlyphVector.java.orig 2007-04-12 22:18:09.000000000 +0200 +++ gnu/java/awt/peer/gtk/FreetypeGlyphVector.java 2008-11-28 18:29:50.000000000 +0100 @@ -247,7 +247,8 @@ /** * Returns the kerning of a glyph pair */ - private native Point2D getKerning(int leftGlyph, int rightGlyph, long font); + private native void getKerning(int leftGlyph, int rightGlyph, long font, + float[] p); private native double[] getMetricsNative(int glyphCode, long font); @@ -301,6 +302,7 @@ GlyphMetrics gm = null; float x = 0; float y = 0; + float[] p = {0.0f, 0.0f}; for(int i = 0; i < nGlyphs; i++) { gm = getGlyphMetrics( i ); @@ -314,9 +316,9 @@ // using the same font if (i != nGlyphs-1 && fontSet[i] == fontSet[i+1]) { - Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i]); - x += p.getX(); - y += p.getY(); + getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i], p); + x += p[0]; + y += p[1]; } } glyphPositions[nGlyphs * 2] = x; Index: include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h =================================================================== --- include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h.orig 2008-06-06 04:10:00.000000000 +0200 +++ include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h 2008-11-28 18:29:50.000000000 +0100 @@ -13,7 +13,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_dispose (JNIEnv *env, jobject, jlongArray); JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getNativeFontPointer (JNIEnv *env, jobject, jint); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs (JNIEnv *env, jobject, jintArray, jintArray, jlongArray); -JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong); +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong, jfloatArray); JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative (JNIEnv *env, jobject, jint, jlong); JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative (JNIEnv *env, jobject, jint, jlong); Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c =================================================================== --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c.orig 2007-04-25 16:53:03.000000000 +0200 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c 2008-11-28 18:29:50.000000000 +0100 @@ -169,15 +169,13 @@ (*env)->ReleaseLongArrayElements (env, fonts, fontArray, 0); } -JNIEXPORT jobject JNICALL +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning -(JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, jint leftGlyph, jlong fnt) + (JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, + jint leftGlyph, jlong fnt, jfloatArray p) { FT_Face ft_face; FT_Vector kern; - jclass cls; - jmethodID method; - jvalue values[2]; PangoFcFont *font; font = JLONG_TO_PTR(PangoFcFont, fnt); @@ -187,12 +185,10 @@ pango_fc_font_unlock_face( font ); - values[0].d = (jdouble)kern.x/64.0; - values[1].d = (jdouble)kern.y/64.0; - - cls = (*env)->FindClass (env, "java/awt/geom/Point2D$Double"); - method = (*env)->GetMethodID (env, cls, "", "(DD)V"); - return (*env)->NewObjectA(env, cls, method, values); + jfloat *pelements = (*env)->GetPrimitiveArrayCritical(env, p, NULL); + pelements[0] = (jfloat)kern.x/64.0; + pelements[1] = (jfloat)kern.y/64.0; + (*env)->ReleasePrimitiveArrayCritical (env, p, pelements, 0); } JNIEXPORT jdoubleArray JNICALL Index: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java =================================================================== --- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java.orig 2008-12-01 07:51:00.000000000 +0100 +++ gnu/java/awt/peer/gtk/GtkFileDialogPeer.java 2008-12-01 07:52:04.000000000 +0100 @@ -67,7 +67,7 @@ FileDialog fd = (FileDialog) awtComponent; - nativeSetDirectory(System.getProperty("user.dir")); + nativeSetDirectory(System.getProperty("user.dir", ".")); setDirectory(fd.getDirectory()); setFile(fd.getFile()); @@ -108,18 +108,26 @@ if (fileName == null || fileName.equals ("")) { currentFile = ""; - nativeSetFile (""); + nativeSetFile (new File("").getAbsolutePath()); return; } // GtkFileChooser requires absolute filenames. If the given filename // is not absolute, let's construct it based on current directory. currentFile = fileName; - if (fileName.indexOf(FS) == 0) + File f = new File(fileName); + if (f.isAbsolute()) nativeSetFile(fileName); else - nativeSetFile(nativeGetDirectory() + FS + fileName); - } + { + // Try with gtk API. + String temp = nativeGetDirectory(); + if (temp != null) + f = new File(temp, fileName); + + nativeSetFile(f.getAbsolutePath()); + } +} public void setDirectory (String directory) { Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c =================================================================== --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c.orig 2008-12-01 07:53:00.000000000 +0100 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c 2008-12-01 07:53:17.000000000 +0100 @@ -58,6 +58,10 @@ gtkpeer_set_global_ref (env, obj); sw = gtk_scrolled_window_new (NULL, NULL); + + /* Sanitize width and height. gtk+ does not accept anything below -1. */ + width = (width < -1 ? 0 : width); + height = (height < -1 ? 0 : height); gtk_widget_set_size_request (sw, width, height); eventbox = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (eventbox), sw);