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