This fixes some exception in the BasicListUI. Thanks to Christopher for
discussing this on IRC.

2006-01-04  Roman Kennke  <[EMAIL PROTECTED]>

        * javax/swing/plaf/basic/BasicListUI.java
        (locationToIndex): Added FIXME about getVisibleRowCount() usage.
        Adjusted iteration to not use visibleRowCount and instead iterate
        over the real number of elements in cellHeights.
        (indexToLocation): Added FIXME about getVisibleRowCount() usage.
        Adjusted iteration to not use visibleRowCount and instead iterate
        over the real number of elements in cellHeights.

/Roman
Index: javax/swing/plaf/basic/BasicListUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicListUI.java,v
retrieving revision 1.45
diff -u -r1.45 BasicListUI.java
--- javax/swing/plaf/basic/BasicListUI.java	3 Jan 2006 16:47:42 -0000	1.45
+++ javax/swing/plaf/basic/BasicListUI.java	4 Jan 2006 21:37:43 -0000
@@ -1189,6 +1189,9 @@
         break;
       case JList.HORIZONTAL_WRAP:
         // determine visible rows and cells per row
+        // FIXME: We really should not use getVisibleRowCount() here. Please
+        // refer to the (Sun) API docs of JList.setVisibleRowCount() for
+        // details.
         int visibleRows = list.getVisibleRowCount();
         int cellsPerRow = -1;
         int numberOfItems = list.getModel().getSize();
@@ -1244,7 +1247,7 @@
         else
           {
             int posY = 0;
-            for (gridY2 = 0; gridY2 <= visibleRows2
+            for (gridY2 = 0; gridY2 <= cellHeights.length
                              && posY + cellHeights[gridY2] < location.y;)
               {
                 posY += cellHeights[gridY2];
@@ -1268,6 +1271,9 @@
         break;
       case JList.HORIZONTAL_WRAP:
         // determine visible rows and cells per row
+        // FIXME: We really should not use getVisibleRowCount() here. Please
+        // refer to the (Sun) API docs of JList.setVisibleRowCount() for
+        // details.
         int visibleRows = list.getVisibleRowCount();
         int numberOfCellsPerRow = -1;
         if (visibleRows <= 0)
@@ -1315,7 +1321,7 @@
             else
               {
                 locY2 = 0;
-                for (int y = 0; y < gridY2; y++)
+                for (int y = 0; gridY2 < cellHeights.length && y < gridY2; y++)
                   locY2 += cellHeights[gridY2];
               }
             loc = new Point(locX2, locY2);
_______________________________________________
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to