Hi,
These are some cleanups for the GtkImage and setIconImage code. If an
GtkImage wasn't properly loaded and you tried to set it as Icon on a
Frame we could crash.
2007-04-04 Mark Wielaard <[EMAIL PROTECTED]>
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
(cp_gtk_image_get_pixbuf): Return NULL when pointer is NULL.
* gnu/java/awt/peer/gtk/GtkImage.java (setImage): Set loaded and
call deliver() after pixels have been set.
* gnu/java/awt/peer/gtk/GtkFramePeer.java (setIconImage): Only
set icon when image has been properly loaded.
Christian, this hopefully solves the issue you reported on irc with
MegaMek. Could you test?
Thanks & Committed,
Mark
Index: gnu/java/awt/peer/gtk/GtkFramePeer.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java,v
retrieving revision 1.50
diff -u -r1.50 GtkFramePeer.java
--- gnu/java/awt/peer/gtk/GtkFramePeer.java 12 Feb 2007 21:39:20 -0000 1.50
+++ gnu/java/awt/peer/gtk/GtkFramePeer.java 4 Apr 2007 22:34:01 -0000
@@ -1,5 +1,5 @@
/* GtkFramePeer.java -- Implements FramePeer with GTK
- Copyright (C) 1999, 2002, 2004, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002, 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -178,10 +178,14 @@
{
if (image != null)
{
+ GtkImage gtkImage;
if (image instanceof GtkImage)
- nativeSetIconImage((GtkImage) image);
- else
- nativeSetIconImage(new GtkImage(image.getSource()));
+ gtkImage = (GtkImage) image;
+ else
+ gtkImage = new GtkImage(image.getSource());
+
+ if (gtkImage.isLoaded && ! gtkImage.errorLoading)
+ nativeSetIconImage(gtkImage);
}
}
Index: gnu/java/awt/peer/gtk/GtkImage.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkImage.java,v
retrieving revision 1.36
diff -u -r1.36 GtkImage.java
--- gnu/java/awt/peer/gtk/GtkImage.java 12 Feb 2007 21:39:20 -0000 1.36
+++ gnu/java/awt/peer/gtk/GtkImage.java 4 Apr 2007 22:34:01 -0000
@@ -374,13 +374,13 @@
return;
}
- isLoaded = true;
- deliver();
synchronized(pixbufLock)
{
createPixbuf();
setPixels(pixels);
}
+ isLoaded = true;
+ deliver();
}
// java.awt.Image methods ////////////////////////////////////////////////
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,v
retrieving revision 1.26
diff -u -r1.26 gnu_java_awt_peer_gtk_GtkImage.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 28 Jun 2006 19:47:42 -0000 1.26
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 4 Apr 2007 22:34:04 -0000
@@ -1,5 +1,5 @@
/* gtkimage.c
- Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -368,6 +368,9 @@
g_assert (data_fid != 0);
data = (*env)->GetObjectField (env, obj, data_fid);
+ if (data == NULL)
+ return NULL;
+
return (GdkPixbuf *)JCL_GetRawData (env, data);
}