With several test cases, I noticed that the selectedIndex of a Choice
box was not being updated. I added a function to take care of this.

I added some checks to GdkGraphics.drawImage to prevent NPEs.

2006-03-30  Lillian Angel  <[EMAIL PROTECTED]>

        * gnu/java/awt/peer/gtk/GdkGraphics.java
        (drawImage): Added check to prevent NPE.
        (drawImage): Likewise.
        (drawImage): Likewise.
        * java/awt/Choice.java
        (dispatchEventImpl): New function. selectedIndex was
        not being updated properly otherwise.

Index: gnu/java/awt/peer/gtk/GdkGraphics.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GdkGraphics.java,v
retrieving revision 1.54
diff -u -r1.54 GdkGraphics.java
--- gnu/java/awt/peer/gtk/GdkGraphics.java	16 Mar 2006 20:21:10 -0000	1.54
+++ gnu/java/awt/peer/gtk/GdkGraphics.java	30 Mar 2006 18:51:59 -0000
@@ -219,8 +219,10 @@
   public boolean drawImage (Image img, int x, int y, 
 			    Color bgcolor, ImageObserver observer)
   {
-    return drawImage(img, x, y, img.getWidth(null), img.getHeight(null),
-		     bgcolor, observer);
+    if (img != null)
+      return drawImage(img, x, y, img.getWidth(null), img.getHeight(null),
+                       bgcolor, observer);
+    return false;
   }
 
   public boolean drawImage (Image img, int x, int y, ImageObserver observer)
@@ -228,16 +230,19 @@
     return drawImage (img, x, y, null, observer);
   }
 
-  public boolean drawImage (Image img, int x, int y, int width, int height, 
-			    Color bgcolor, ImageObserver observer)
+  public boolean drawImage(Image img, int x, int y, int width, int height,
+                           Color bgcolor, ImageObserver observer)
   {
-    if (img instanceof GtkImage)
-      return ((GtkImage)img).drawImage (this, x, y, width, height, 
-					bgcolor, observer);
-    else
-      return (new GtkImage(img.getSource())).drawImage (this, x, y, 
-							width, height, 
-							bgcolor, observer);
+    if (img != null)
+      {
+        if (img instanceof GtkImage)
+          return ((GtkImage) img).drawImage(this, x, y, width, height, bgcolor,
+                                            observer);
+        return (new GtkImage(img.getSource())).drawImage(this, x, y, width,
+                                                         height, bgcolor,
+                                                         observer);
+      }
+    return false;
   }
 
   public boolean drawImage (Image img, int x, int y, int width, int height, 
@@ -250,14 +255,16 @@
 			    int sx1, int sy1, int sx2, int sy2, 
 			    Color bgcolor, ImageObserver observer)
   {
-    if (img instanceof GtkImage)
-      return ((GtkImage)img).drawImage(this, dx1, dy1, dx2, dy2, 
-				       sx1, sy1, sx2, sy2, bgcolor, observer);
-    else
-      return (new GtkImage(img.getSource())).drawImage(this, dx1, dy1, 
-						       dx2, dy2, 
-						       sx1, sy1, sx2, sy2, 
-						       bgcolor, observer);
+    if (img != null)
+      {
+        if (img instanceof GtkImage)
+          return ((GtkImage) img).drawImage(this, dx1, dy1, dx2, dy2, sx1, sy1,
+                                            sx2, sy2, bgcolor, observer);
+        return (new GtkImage(img.getSource())).drawImage(this, dx1, dy1, dx2,
+                                                         dy2, sx1, sy1, sx2,
+                                                         sy2, bgcolor, observer);
+      }
+    return false;
   }
 
   public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2, 
Index: java/awt/Choice.java
===================================================================
RCS file: /sources/classpath/classpath/java/awt/Choice.java,v
retrieving revision 1.24
diff -u -r1.24 Choice.java
--- java/awt/Choice.java	8 Feb 2006 16:31:23 -0000	1.24
+++ java/awt/Choice.java	30 Mar 2006 18:52:00 -0000
@@ -556,6 +557,17 @@
     super.processEvent(event);
 }
 
+void 
+dispatchEventImpl(AWTEvent e)
+{
+  if (e.id <= ItemEvent.ITEM_LAST
+      && e.id >= ItemEvent.ITEM_FIRST
+      && (item_listeners != null || (eventMask & AWTEvent.ITEM_EVENT_MASK) != 0))
+    processEvent(e);
+  else
+    super.dispatchEventImpl(e);
+}
+
 /*************************************************************************/
 
 /**

Reply via email to