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, "<init>", "(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);