This patch fixes the assertion errors I found when running several awt applications in maemo. If the colormap is null, we should not reference memory, unreference memory or allocate color for it.
2006-03-27 Lillian Angel <[EMAIL PROTECTED]> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (Java_gnu_java_awt_peer_gtk_GdkGraphics_nativeDispose): Added check for colormap. Prevents assertion error. (Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor): Likewise. (Java_gnu_java_awt_peer_gtk_GdkGraphics_nativeCopyState): Likewise. (Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II): Likewise. (Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage): Likewise. (Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked): Likewise.
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c =================================================================== RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,v retrieving revision 1.34 diff -u -r1.34 gnu_java_awt_peer_gtk_GdkGraphics.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c 16 Mar 2006 03:24:18 -0000 1.34 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c 27 Mar 2006 20:01:39 -0000 @@ -160,7 +160,8 @@ else /* GDK_IS_WINDOW (g->drawable) */ g_object_ref (g->drawable); - g_object_ref (g->cm); + if (g->cm != NULL) + g_object_ref (g->cm); NSA_SET_G_PTR (env, obj, g); @@ -181,7 +182,9 @@ g->drawable = (GdkDrawable *) gdk_pixmap_new (NULL, width, height, gdk_rgb_get_visual ()->depth); g->cm = gdk_rgb_get_colormap (); - g_object_ref (g->cm); + + if (g->cm != NULL) + g_object_ref (g->cm); g->gc = gdk_gc_new (g->drawable); NSA_SET_G_PTR (env, obj, g); @@ -208,7 +211,9 @@ g->drawable = (GdkDrawable *)pixmap; g->cm = gdk_drawable_get_colormap (g->drawable); - g_object_ref (g->cm); + + if (g->cm != NULL) + g_object_ref (g->cm); g->gc = gdk_gc_new (g->drawable); NSA_SET_G_PTR (env, obj, g); @@ -235,7 +240,10 @@ g_object_ref (g->drawable); g->cm = gtk_widget_get_colormap (widget); - g_object_ref (g->cm); + + if (g->cm != NULL) + g_object_ref (g->cm); + g->gc = gdk_gc_new (g->drawable); gdk_gc_copy (g->gc, widget->style->fg_gc[GTK_STATE_NORMAL]); color = widget->style->fg[GTK_STATE_NORMAL]; @@ -293,15 +301,17 @@ } XFlush (GDK_DISPLAY ()); - - g_object_unref (g->gc); + + if (g->gc != NULL) + g_object_unref (g->gc); if (GDK_STABLE_IS_PIXMAP (g->drawable)) g_object_unref (g->drawable); - else /* GDK_IS_WINDOW (g->drawable) */ + else if (g->drawable != NULL) g_object_unref (g->drawable); - g_object_unref (g->cm); + if (g->cm != NULL) + g_object_unref (g->cm); g_free (g); @@ -536,10 +546,12 @@ color.blue = blue << 8; g = (struct graphics *) NSA_GET_G_PTR (env, obj); - - gdk_colormap_alloc_color (g->cm, &color, TRUE, TRUE); + + if (g->cm != NULL) + gdk_colormap_alloc_color (g->cm, &color, TRUE, TRUE); + gdk_gc_set_foreground (g->gc, &color); - + gdk_threads_leave (); }