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 ();
 }
 

Reply via email to