changeset 380:0e1d82bbcb2c

Merge
author tbell
date Wed, 25 Jun 2008 16:44:55 -0700
parents a4998b3b7807 fbb75a5c25ff
children b6d6877c1155 4edf07b01e29
files
diffstat 25 files changed, 709 insertions(+), 386 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java	Wed Jun 25 16:44:55 2008 -0700
@@ -1222,9 +1222,7 @@
             "FileChooser.enterFileNameLabelMnemonic", new Integer (KeyEvent.VK_N), // 'n'
             "FileChooser.ancestorInputMap",
                new UIDefaults.LazyInputMap(new Object[] {
-                     "ESCAPE", "cancelSelection",
-                     "ENTER", "approveSelection",
-                "ctrl ENTER", "approveSelection"
+                     "ESCAPE", "cancelSelection"
                  }),
 
 
--- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java	Wed Jun 25 16:44:55 2008 -0700
@@ -825,9 +825,7 @@
                      "ESCAPE", "cancelSelection",
                      "F2", "editFileName",
                      "F5", "refresh",
-                     "BACK_SPACE", "Go Up",
-                     "ENTER", "approveSelection",
-                "ctrl ENTER", "approveSelection"
+                     "BACK_SPACE", "Go Up"
                  }),
 
             "FileView.directoryIcon", SwingUtilities2.makeIcon(getClass(),
--- a/src/share/classes/java/beans/EventHandler.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/java/beans/EventHandler.java	Wed Jun 25 16:44:55 2008 -0700
@@ -636,7 +636,7 @@
      * time a mouse button is pressed, one would write:
      *<blockquote>
      *<pre>
-     *EventHandler.create(MouseListener.class, "mousePressed", target, "origin", "point");
+     *EventHandler.create(MouseListener.class, target, "origin", "point", "mousePressed");
      *</pre>
      *</blockquote>
      *
--- a/src/share/classes/java/io/File.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/java/io/File.java	Wed Jun 25 16:44:55 2008 -0700
@@ -25,6 +25,7 @@
 
 package java.io;
 
+import java.beans.ConstructorProperties;
 import java.net.URI;
 import java.net.URL;
 import java.net.MalformedURLException;
@@ -234,6 +235,7 @@
      * @throws  NullPointerException
      *          If the <code>pathname</code> argument is <code>null</code>
      */
+    @ConstructorProperties("path")
     public File(String pathname) {
         if (pathname == null) {
             throw new NullPointerException();
--- a/src/share/classes/javax/swing/JFileChooser.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/JFileChooser.java	Wed Jun 25 16:44:55 2008 -0700
@@ -770,7 +770,8 @@
      * @since 1.4
      */
     protected JDialog createDialog(Component parent) throws HeadlessException {
-        String title = getUI().getDialogTitle(this);
+        FileChooserUI ui = getUI();
+        String title = ui.getDialogTitle(this);
         putClientProperty(AccessibleContext.ACCESSIBLE_DESCRIPTION_PROPERTY,
                           title);
 
@@ -794,6 +795,7 @@
                 dialog.getRootPane().setWindowDecorationStyle(JRootPane.FILE_CHOOSER_DIALOG);
             }
         }
+        dialog.getRootPane().setDefaultButton(ui.getDefaultButton(this));
         dialog.pack();
         dialog.setLocationRelativeTo(parent);
 
--- a/src/share/classes/javax/swing/JPopupMenu.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/JPopupMenu.java	Wed Jun 25 16:44:55 2008 -0700
@@ -41,6 +41,7 @@
 import javax.swing.plaf.ComponentUI;
 import javax.swing.plaf.basic.BasicComboPopup;
 import javax.swing.event.*;
+import sun.security.util.SecurityConstants;
 
 import java.applet.Applet;
 
@@ -320,17 +321,67 @@
      * This adustment may be cancelled by invoking the application with
      * -Djavax.swing.adjustPopupLocationToFit=false
      */
-    Point adjustPopupLocationToFitScreen(int xposition, int yposition) {
-        Point p = new Point(xposition, yposition);
+    Point adjustPopupLocationToFitScreen(int xPosition, int yPosition) {
+        Point popupLocation = new Point(xPosition, yPosition);
 
-        if(popupPostionFixDisabled == true || GraphicsEnvironment.isHeadless())
-            return p;
+        if(popupPostionFixDisabled == true || GraphicsEnvironment.isHeadless()) {
+            return popupLocation;
+        }
 
+        // Get screen bounds
+        Rectangle scrBounds;
+        GraphicsConfiguration gc = getCurrentGraphicsConfiguration(popupLocation);
         Toolkit toolkit = Toolkit.getDefaultToolkit();
-        Rectangle screenBounds;
+        if(gc != null) {
+            // If we have GraphicsConfiguration use it to get screen bounds
+            scrBounds = gc.getBounds();
+        } else {
+            // If we don't have GraphicsConfiguration use primary screen
+            scrBounds = new Rectangle(toolkit.getScreenSize());
+        }
+
+        // Calculate the screen size that popup should fit
+        Dimension popupSize = JPopupMenu.this.getPreferredSize();
+        int popupRightX = popupLocation.x + popupSize.width;
+        int popupBottomY = popupLocation.y + popupSize.height;
+        int scrWidth = scrBounds.width;
+        int scrHeight = scrBounds.height;
+        if (!canPopupOverlapTaskBar()) {
+            // Insets include the task bar. Take them into account.
+            Insets scrInsets = toolkit.getScreenInsets(gc);
+            scrBounds.x += scrInsets.left;
+            scrBounds.y += scrInsets.top;
+            scrWidth -= scrInsets.left + scrInsets.right;
+            scrHeight -= scrInsets.top + scrInsets.bottom;
+        }
+        int scrRightX = scrBounds.x + scrWidth;
+        int scrBottomY = scrBounds.y + scrHeight;
+
+        // Ensure that popup menu fits the screen
+        if (popupRightX > scrRightX) {
+            popupLocation.x = scrRightX - popupSize.width;
+            if( popupLocation.x < scrBounds.x ) {
+                popupLocation.x = scrBounds.x ;
+            }
+        }
+        if (popupBottomY > scrBottomY) {
+            popupLocation.y = scrBottomY - popupSize.height;
+            if( popupLocation.y < scrBounds.y ) {
+                popupLocation.y = scrBounds.y;
+            }
+        }
+
+        return popupLocation;
+    }
+
+    /**
+     * Tries to find GraphicsConfiguration
+     * that contains the mouse cursor position.
+     * Can return null.
+     */
+    private GraphicsConfiguration getCurrentGraphicsConfiguration(
+            Point popupLocation) {
         GraphicsConfiguration gc = null;
-        // Try to find GraphicsConfiguration, that includes mouse
-        // pointer position
         GraphicsEnvironment ge =
             GraphicsEnvironment.getLocalGraphicsEnvironment();
         GraphicsDevice[] gd = ge.getScreenDevices();
@@ -338,50 +389,36 @@
             if(gd[i].getType() == GraphicsDevice.TYPE_RASTER_SCREEN) {
                 GraphicsConfiguration dgc =
                     gd[i].getDefaultConfiguration();
-                if(dgc.getBounds().contains(p)) {
+                if(dgc.getBounds().contains(popupLocation)) {
                     gc = dgc;
                     break;
                 }
             }
         }
-
         // If not found and we have invoker, ask invoker about his gc
         if(gc == null && getInvoker() != null) {
             gc = getInvoker().getGraphicsConfiguration();
         }
+        return gc;
+    }
 
-        if(gc != null) {
-            // If we have GraphicsConfiguration use it to get
-            // screen bounds
-            screenBounds = gc.getBounds();
-        } else {
-            // If we don't have GraphicsConfiguration use primary screen
-            screenBounds = new Rectangle(toolkit.getScreenSize());
+    /**
+     * Checks that there are enough security permissions
+     * to make popup "always on top", which allows to show it above the task bar.
+     */
+    static boolean canPopupOverlapTaskBar() {
+        boolean result = true;
+        try {
+            SecurityManager sm = System.getSecurityManager();
+            if (sm != null) {
+                sm.checkPermission(
+                        SecurityConstants.SET_WINDOW_ALWAYS_ON_TOP_PERMISSION);
+            }
+        } catch (SecurityException se) {
+            // There is no permission to show popups over the task bar
+            result = false;
         }
-
-        Dimension size;
-
-        size = JPopupMenu.this.getPreferredSize();
-
-        // Use long variables to prevent overflow
-        long pw = (long) p.x + (long) size.width;
-        long ph = (long) p.y + (long) size.height;
-
-        if( pw > screenBounds.x + screenBounds.width )
-             p.x = screenBounds.x + screenBounds.width - size.width;
-
-        if( ph > screenBounds.y + screenBounds.height)
-             p.y = screenBounds.y + screenBounds.height - size.height;
-
-        /* Change is made to the desired (X,Y) values, when the
-           PopupMenu is too tall OR too wide for the screen
-        */
-        if( p.x < screenBounds.x )
-            p.x = screenBounds.x ;
-        if( p.y < screenBounds.y )
-            p.y = screenBounds.y;
-
-        return p;
+        return result;
     }
 
 
--- a/src/share/classes/javax/swing/JSlider.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/JSlider.java	Wed Jun 25 16:44:55 2008 -0700
@@ -25,18 +25,15 @@
 
 package javax.swing;
 
-import javax.swing.border.*;
 import javax.swing.event.*;
 import javax.swing.plaf.*;
 import javax.accessibility.*;
 
 import java.io.Serializable;
 import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
 import java.io.IOException;
 
-import java.awt.Color;
-import java.awt.Font;
+import java.awt.*;
 import java.util.*;
 import java.beans.*;
 
@@ -409,8 +406,7 @@
      * @since 1.4
      */
     public ChangeListener[] getChangeListeners() {
-        return (ChangeListener[])listenerList.getListeners(
-                ChangeListener.class);
+        return listenerList.getListeners(ChangeListener.class);
     }
 
 
@@ -642,9 +638,7 @@
     /**
      * Sets the model's {@code valueIsAdjusting} property.  Slider look and
      * feel implementations should set this property to {@code true} when
-     * a knob drag begins, and to {@code false} when the drag ends.  The
-     * slider model will not generate {@code ChangeEvent}s while
-     * {@code valueIsAdjusting} is {@code true}.
+     * a knob drag begins, and to {@code false} when the drag ends.
      *
      * @param b the new value for the {@code valueIsAdjusting} property
      * @see   #getValueIsAdjusting
@@ -764,6 +758,33 @@
         updateLabelSizes();
     }
 
+    /**
+     * {@inheritDoc}
+     * @since 1.7
+     */
+    public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) {
+        if (!isShowing()) {
+            return false;
+        }
+
+        // Check that there is a label with such image
+        Enumeration elements = labelTable.elements();
+
+        while (elements.hasMoreElements()) {
+            Component component = (Component) elements.nextElement();
+
+            if (component instanceof JLabel) {
+                JLabel label = (JLabel) component;
+
+                if (SwingUtilities.doesIconReferenceImage(label.getIcon(), img) ||
+                        SwingUtilities.doesIconReferenceImage(label.getDisabledIcon(), img)) {
+                    return super.imageUpdate(img, infoflags, x, y, w, h);
+                }
+            }
+        }
+
+        return false;
+    }
 
     /**
      * Returns the dictionary of what labels to draw at which values.
@@ -826,17 +847,16 @@
      * @see JComponent#updateUI
      */
     protected void updateLabelUIs() {
-        if ( getLabelTable() == null ) {
+        Dictionary labelTable = getLabelTable();
+
+        if (labelTable == null) {
             return;
         }
-        Enumeration labels = getLabelTable().keys();
+        Enumeration labels = labelTable.keys();
         while ( labels.hasMoreElements() ) {
-            Object value = getLabelTable().get( labels.nextElement() );
-            if ( value instanceof JComponent ) {
-                JComponent component = (JComponent)value;
-                component.updateUI();
-                component.setSize( component.getPreferredSize()  );
-            }
+            JComponent component = (JComponent) labelTable.get(labels.nextElement());
+            component.updateUI();
+            component.setSize(component.getPreferredSize());
         }
     }
 
@@ -845,11 +865,8 @@
         if (labelTable != null) {
             Enumeration labels = labelTable.elements();
             while (labels.hasMoreElements()) {
-                Object value = labels.nextElement();
-                if (value instanceof JComponent) {
-                    JComponent component = (JComponent)value;
-                    component.setSize(component.getPreferredSize());
-                }
+                JComponent component = (JComponent) labels.nextElement();
+                component.setSize(component.getPreferredSize());
             }
         }
     }
@@ -960,14 +977,14 @@
                 if ( e.getPropertyName().equals( "minimum" ) ||
                      e.getPropertyName().equals( "maximum" ) ) {
 
-                    Enumeration keys = getLabelTable().keys();
-                    Object key = null;
+                    Dictionary labelTable = getLabelTable();
+                    Enumeration keys = labelTable.keys();
                     Hashtable hashtable = new Hashtable();
 
                     // Save the labels that were added by the developer
                     while ( keys.hasMoreElements() ) {
-                        key = keys.nextElement();
-                        Object value = getLabelTable().get( key );
+                        Object key = keys.nextElement();
+                        Object value = labelTable.get(key);
                         if ( !(value instanceof LabelUIResource) ) {
                             hashtable.put( key, value );
                         }
@@ -979,7 +996,7 @@
                     // Add the saved labels
                     keys = hashtable.keys();
                     while ( keys.hasMoreElements() ) {
-                        key = keys.nextElement();
+                        Object key = keys.nextElement();
                         put( key, hashtable.get( key ) );
                     }
 
@@ -996,8 +1013,10 @@
 
         SmartHashtable table = new SmartHashtable( increment, start );
 
-        if ( getLabelTable() != null && (getLabelTable() instanceof PropertyChangeListener) ) {
-            removePropertyChangeListener( (PropertyChangeListener)getLabelTable() );
+        Dictionary labelTable = getLabelTable();
+
+        if (labelTable != null && (labelTable instanceof PropertyChangeListener)) {
+            removePropertyChangeListener((PropertyChangeListener) labelTable);
         }
 
         addPropertyChangeListener( table );
--- a/src/share/classes/javax/swing/PopupFactory.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/PopupFactory.java	Wed Jun 25 16:44:55 2008 -0700
@@ -548,47 +548,46 @@
         }
 
         /**
-         * Returns true if the Popup can fit on the screen.
+         * Returns true if popup can fit the screen and the owner's top parent.
+         * It determines can popup be lightweight or mediumweight.
          */
         boolean fitsOnScreen() {
+            boolean result = false;
             Component component = getComponent();
+            if (owner != null && component != null) {
+                Container parent = (Container) SwingUtilities.getRoot(owner);
+                int popupWidth = component.getWidth();
+                int popupHeight = component.getHeight();
+                Rectangle parentBounds = parent.getBounds();
+                if (parent instanceof JFrame ||
+                    parent instanceof JDialog ||
+                    parent instanceof JWindow) {
 
-            if (owner != null && component != null) {
-                Container parent;
-                int width = component.getWidth();
-                int height = component.getHeight();
-                for(parent = owner.getParent(); parent != null ;
-                    parent = parent.getParent()) {
-                    if (parent instanceof JFrame ||
-                        parent instanceof JDialog ||
-                        parent instanceof JWindow) {
+                    Insets i = parent.getInsets();
+                    parentBounds.x += i.left;
+                    parentBounds.y += i.top;
+                    parentBounds.width -= i.left + i.right;
+                    parentBounds.height -= i.top + i.bottom;
 
-                        Rectangle r = parent.getBounds();
-                        Insets i = parent.getInsets();
-                        r.x += i.left;
-                        r.y += i.top;
-                        r.width -= (i.left + i.right);
-                        r.height -= (i.top + i.bottom);
-
-                        GraphicsConfiguration gc = parent.getGraphicsConfiguration();
+                    if (JPopupMenu.canPopupOverlapTaskBar()) {
+                        GraphicsConfiguration gc =
+                                parent.getGraphicsConfiguration();
                         Rectangle popupArea = getContainerPopupArea(gc);
-                        return r.intersection(popupArea).contains(x, y, width, height);
-
-                    } else if (parent instanceof JApplet) {
-                        Rectangle r = parent.getBounds();
-                        Point p  = parent.getLocationOnScreen();
-
-                        r.x = p.x;
-                        r.y = p.y;
-                        return r.contains(x, y, width, height);
-                    } else if (parent instanceof Window ||
-                               parent instanceof Applet) {
-                        // No suitable swing component found
-                        break;
+                        result = parentBounds.intersection(popupArea)
+                                .contains(x, y, popupWidth, popupHeight);
+                    } else {
+                        result = parentBounds
+                                .contains(x, y, popupWidth, popupHeight);
                     }
+                } else if (parent instanceof JApplet) {
+                    Point p = parent.getLocationOnScreen();
+                    parentBounds.x = p.x;
+                    parentBounds.y = p.y;
+                    result = parentBounds
+                            .contains(x, y, popupWidth, popupHeight);
                 }
             }
-            return false;
+            return result;
         }
 
         Rectangle getContainerPopupArea(GraphicsConfiguration gc) {
--- a/src/share/classes/javax/swing/plaf/FileChooserUI.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/plaf/FileChooserUI.java	Wed Jun 25 16:44:55 2008 -0700
@@ -25,7 +25,7 @@
 
 package javax.swing.plaf;
 
-import javax.swing.JFileChooser;
+import javax.swing.*;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileView;
 import java.io.File;
@@ -46,4 +46,15 @@
 
     public abstract void rescanCurrentDirectory(JFileChooser fc);
     public abstract void ensureFileIsVisible(JFileChooser fc, File f);
+
+    /**
+     * Returns default button for current <code>LookAndFeel</code>.
+     * <code>JFileChooser</code> will use this button as default button
+     * for dialog windows.
+     *
+     * @since 1.7
+     */
+    public JButton getDefaultButton(JFileChooser fc) {
+        return null;
+    }
 }
--- a/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Wed Jun 25 16:44:55 2008 -0700
@@ -196,7 +196,7 @@
     }
 
     protected void sort(Vector<? extends File> v){
-        ShellFolder.sortFiles(v);
+        ShellFolder.sort(v);
     }
 
     // Obsolete - not used
--- a/src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Wed Jun 25 16:44:55 2008 -0700
@@ -384,6 +384,10 @@
         return null;
     }
 
+    public JButton getDefaultButton(JFileChooser fc) {
+        return getApproveButton(fc);
+    }
+
     public String getApproveButtonToolTipText(JFileChooser fc) {
         String tooltipText = fc.getApproveButtonToolTipText();
         if(tooltipText != null) {
--- a/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Wed Jun 25 16:44:55 2008 -0700
@@ -25,25 +25,12 @@
 
 package javax.swing.plaf.basic;
 
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Adjustable;
 import java.awt.event.*;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Dimension;
-import java.awt.Rectangle;
-import java.awt.Point;
-import java.awt.Insets;
-import java.awt.Color;
-import java.awt.IllegalComponentStateException;
-import java.awt.Polygon;
+import java.awt.*;
 import java.beans.*;
 import java.util.Dictionary;
 import java.util.Enumeration;
 
-import javax.swing.border.AbstractBorder;
-
 import javax.swing.*;
 import javax.swing.event.*;
 import javax.swing.plaf.*;
@@ -409,7 +396,7 @@
                 Enumeration elements = dictionary.elements();
                 int baseline = -1;
                 while (elements.hasMoreElements()) {
-                    Component label = (Component)elements.nextElement();
+                    JComponent label = (JComponent) elements.nextElement();
                     Dimension pref = label.getPreferredSize();
                     int labelBaseline = label.getBaseline(pref.width,
                                                           pref.height);
@@ -634,7 +621,7 @@
 
 
     protected void calculateTrackRect() {
-        int centerSpacing = 0; // used to center sliders added using BorderLayout.CENTER (bug 4275631)
+        int centerSpacing; // used to center sliders added using BorderLayout.CENTER (bug 4275631)
         if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
             centerSpacing = thumbRect.height;
             if ( slider.getPaintTicks() ) centerSpacing += getTickLength();
@@ -764,7 +751,7 @@
         if ( dictionary != null ) {
             Enumeration keys = dictionary.keys();
             while ( keys.hasMoreElements() ) {
-                Component label = (Component)dictionary.get( keys.nextElement() );
+                JComponent label = (JComponent) dictionary.get(keys.nextElement());
                 widest = Math.max( label.getPreferredSize().width, widest );
             }
         }
@@ -777,7 +764,7 @@
         if ( dictionary != null ) {
             Enumeration keys = dictionary.keys();
             while ( keys.hasMoreElements() ) {
-                Component label = (Component)dictionary.get( keys.nextElement() );
+                JComponent label = (JComponent) dictionary.get(keys.nextElement());
                 tallest = Math.max( label.getPreferredSize().height, tallest );
             }
         }
@@ -1001,22 +988,14 @@
 
     public void paintTicks(Graphics g)  {
         Rectangle tickBounds = tickRect;
-        int i;
-        int maj, min, max;
-        int w = tickBounds.width;
-        int h = tickBounds.height;
-        int centerEffect, tickHeight;
 
         g.setColor(DefaultLookup.getColor(slider, this, "Slider.tickColor", Color.black));
 
-        maj = slider.getMajorTickSpacing();
-        min = slider.getMinorTickSpacing();
-
         if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
            g.translate( 0, tickBounds.y);
 
             int value = slider.getMinimum();
-            int xPos = 0;
+            int xPos;
 
             if ( slider.getMinorTickSpacing() > 0 ) {
                 while ( value <= slider.getMaximum() ) {
@@ -1042,7 +1021,7 @@
            g.translate(tickBounds.x, 0);
 
             int value = slider.getMinimum();
-            int yPos = 0;
+            int yPos;
 
             if ( slider.getMinorTickSpacing() > 0 ) {
                 int offset = 0;
@@ -1111,10 +1090,19 @@
                 Integer key = (Integer)keys.nextElement();
                 int value = key.intValue();
                 if (value >= minValue && value <= maxValue) {
-                    Component label = (Component)dictionary.get( key );
-                    if (label instanceof JComponent) {
-                        ((JComponent)label).setEnabled(enabled);
+                    JComponent label = (JComponent) dictionary.get(key);
+                    label.setEnabled(enabled);
+
+                    if (label instanceof JLabel) {
+                        Icon icon = label.isEnabled() ? ((JLabel) label).getIcon() : ((JLabel) label).getDisabledIcon();
+
+                        if (icon instanceof ImageIcon) {
+                            // Register Slider as an image observer. It allows to catch notifications about
+                            // image changes (e.g. gif animation)
+                            Toolkit.getDefaultToolkit().checkImage(((ImageIcon) icon).getImage(), -1, -1, slider);
+                        }
                     }
+
                     if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
                         g.translate( 0, labelBounds.y );
                         paintHorizontalLabel( g, value, label );
@@ -1364,7 +1352,7 @@
         int min = slider.getMinimum();
         int max = slider.getMaximum();
         double valueRange = (double)max - (double)min;
-        double pixelsPerValue = (double)trackHeight / (double)valueRange;
+        double pixelsPerValue = (double)trackHeight / valueRange;
         int trackBottom = trackY + (trackHeight - 1);
         int yPosition;
 
@@ -1715,7 +1703,7 @@
         * of the thumb relative to the origin of the track.
         */
         public void mouseDragged(MouseEvent e) {
-            int thumbMiddle = 0;
+            int thumbMiddle;
 
             if (!slider.isEnabled()) {
                 return;
@@ -1841,7 +1829,7 @@
         public void componentResized(ComponentEvent e)  {
             getHandler().componentResized(e);
         }
-    };
+    }
 
     /**
      * Focus-change listener.
@@ -1903,7 +1891,7 @@
             return b;
         }
 
-    };
+    }
 
 
     /**
--- a/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java	Wed Jun 25 16:44:55 2008 -0700
@@ -853,9 +853,7 @@
                      "ESCAPE", "cancelSelection",
                      "F2", "editFileName",
                      "F5", "refresh",
-                     "BACK_SPACE", "Go Up",
-                     "ENTER", "approveSelection",
-                "ctrl ENTER", "approveSelection"
+                     "BACK_SPACE", "Go Up"
                  }),
 
 
--- a/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java	Wed Jun 25 16:44:55 2008 -0700
@@ -25,26 +25,17 @@
 
 package javax.swing.plaf.synth;
 
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Adjustable;
 import java.awt.event.*;
 import java.awt.Graphics;
 import java.awt.Dimension;
-import java.awt.Font;
 import java.awt.FontMetrics;
 import java.awt.Rectangle;
 import java.awt.Point;
 import java.awt.Insets;
-import java.awt.Color;
-import java.awt.IllegalComponentStateException;
-import java.awt.Polygon;
 import java.beans.*;
 import java.util.Dictionary;
 import java.util.Enumeration;
-import javax.swing.border.AbstractBorder;
 import javax.swing.*;
-import javax.swing.event.*;
 import javax.swing.plaf.*;
 import javax.swing.plaf.basic.BasicSliderUI;
 import sun.swing.plaf.synth.SynthUI;
@@ -203,8 +194,7 @@
                 centerY += valueHeight + 2;
                 centerY += trackHeight + trackInsets.top + trackInsets.bottom;
                 centerY += tickHeight + 2;
-                Component label = (Component)slider.getLabelTable().
-                                   elements().nextElement();
+                JComponent label = (JComponent) slider.getLabelTable().elements().nextElement();
                 Dimension pref = label.getPreferredSize();
                 return centerY + label.getBaseline(pref.width, pref.height);
             }
@@ -226,8 +216,7 @@
                     int trackHeight = contentHeight - valueHeight;
                     int yPosition = yPositionForValue(value.intValue(), trackY,
                                                       trackHeight);
-                    Component label = (Component)slider.getLabelTable().
-                            get(value);
+                    JComponent label = (JComponent) slider.getLabelTable().get(value);
                     Dimension pref = label.getPreferredSize();
                     return yPosition - pref.height / 2 +
                             label.getBaseline(pref.width, pref.height);
@@ -434,16 +423,14 @@
     /**
      * Calculates the pad for the label at the specified index.
      *
-     * @param index index of the label to calculate pad for.
+     * @param i index of the label to calculate pad for.
      * @return padding required to keep label visible.
      */
     private int getPadForLabel(int i) {
-        Dictionary dictionary = slider.getLabelTable();
         int pad = 0;
 
-        Object o = dictionary.get(i);
-        if (o != null) {
-            Component c = (Component)o;
+        JComponent c = (JComponent) slider.getLabelTable().get(i);
+        if (c != null) {
             int centerX = xPositionForValue(i);
             int cHalfWidth = c.getPreferredSize().width / 2;
             if (centerX - cHalfWidth < insetCache.left) {
@@ -500,8 +487,6 @@
         }
     }
 
-    private static Rectangle unionRect = new Rectangle();
-
     public void setThumbLocation(int x, int y) {
         super.setThumbLocation(x, y);
         // Value rect is tied to the thumb location.  We need to repaint when
@@ -544,7 +529,7 @@
                 trackBorder;
         int trackLength = trackBottom - trackTop;
         double valueRange = (double)max - (double)min;
-        double pixelsPerValue = (double)trackLength / (double)valueRange;
+        double pixelsPerValue = (double)trackLength / valueRange;
         int yPosition;
 
         if (!drawInverted()) {
@@ -802,8 +787,7 @@
         }
 
         public void mouseDragged(MouseEvent e) {
-            SynthScrollBarUI ui;
-            int thumbMiddle = 0;
+            int thumbMiddle;
 
             if (!slider.isEnabled()) {
                 return;
--- a/src/share/classes/javax/swing/text/FlowView.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/javax/swing/text/FlowView.java	Wed Jun 25 16:44:55 2008 -0700
@@ -333,17 +333,24 @@
      * @since 1.3
      */
     public static class FlowStrategy {
-        int damageStart = Integer.MAX_VALUE;
+        Position damageStart = null;
         Vector<View> viewBuffer;
 
         void addDamage(FlowView fv, int offset) {
             if (offset >= fv.getStartOffset() && offset < fv.getEndOffset()) {
-                damageStart = Math.min(damageStart, offset);
+                if (damageStart == null || offset < damageStart.getOffset()) {
+                    try {
+                        damageStart = fv.getDocument().createPosition(offset);
+                    } catch (BadLocationException e) {
+                        // shouldn't happen since offset is inside view bounds
+                        assert(false);
+                    }
+                }
             }
         }
 
         void unsetDamage() {
-            damageStart = Integer.MAX_VALUE;
+            damageStart = null;
         }
 
         /**
@@ -438,13 +445,14 @@
             int p1 = fv.getEndOffset();
 
             if (fv.majorAllocValid) {
-                if (damageStart == Integer.MAX_VALUE) {
+                if (damageStart == null) {
                     return;
                 }
                 // In some cases there's no view at position damageStart, so
                 // step back and search again. See 6452106 for details.
-                while ((rowIndex = fv.getViewIndexAtPosition(damageStart)) < 0) {
-                    damageStart--;
+                int offset = damageStart.getOffset();
+                while ((rowIndex = fv.getViewIndexAtPosition(offset)) < 0) {
+                    offset--;
                 }
                 if (rowIndex > 0) {
                     rowIndex--;
--- a/src/share/classes/sun/awt/shell/ShellFolder.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/sun/awt/shell/ShellFolder.java	Wed Jun 25 16:44:55 2008 -0700
@@ -25,6 +25,7 @@
 
 package sun.awt.shell;
 
+import javax.swing.*;
 import java.awt.Image;
 import java.awt.Toolkit;
 import java.io.*;
@@ -37,6 +38,10 @@
  */
 
 public abstract class ShellFolder extends File {
+    private static final String COLUMN_NAME = "FileChooser.fileNameHeaderText";
+    private static final String COLUMN_SIZE = "FileChooser.fileSizeHeaderText";
+    private static final String COLUMN_DATE = "FileChooser.fileDateHeaderText";
+
     protected ShellFolder parent;
 
     /**
@@ -268,8 +273,45 @@
 
     // Override File methods
 
-    public static void sortFiles(List files) {
-        shellFolderManager.sortFiles(files);
+    public static void sort(List<? extends File> files) {
+        if (files == null || files.size() <= 1) {
+            return;
+        }
+
+        // Check that we can use the ShellFolder.sortChildren() method:
+        //   1. All files have the same non-null parent
+        //   2. All files is ShellFolders
+        File commonParent = null;
+
+        for (File file : files) {
+            File parent = file.getParentFile();
+
+            if (parent == null || !(file instanceof ShellFolder)) {
+                commonParent = null;
+
+                break;
+            }
+
+            if (commonParent == null) {
+                commonParent = parent;
+            } else {
+                if (commonParent != parent && !commonParent.equals(parent)) {
+                    commonParent = null;
+
+                    break;
+                }
+            }
+        }
+
+        if (commonParent instanceof ShellFolder) {
+            ((ShellFolder) commonParent).sortChildren(files);
+        } else {
+            Collections.sort(files, FILE_COMPARATOR);
+        }
+    }
+
+    public void sortChildren(List<? extends File> files) {
+        Collections.sort(files, FILE_COMPARATOR);
     }
 
     public boolean isAbsolute() {
@@ -356,18 +398,131 @@
     }
 
     public static ShellFolderColumnInfo[] getFolderColumns(File dir) {
-        return shellFolderManager.getFolderColumns(dir);
-    }
+        ShellFolderColumnInfo[] columns = null;
 
-    public static Object getFolderColumnValue(File file, int column) {
-        return shellFolderManager.getFolderColumnValue(file, column);
+        if (dir instanceof ShellFolder) {
+            columns = ((ShellFolder) dir).getFolderColumns();
+        }
+
+        if (columns == null) {
+            columns = new ShellFolderColumnInfo[]{
+                    new ShellFolderColumnInfo(COLUMN_NAME, 150,
+                            SwingConstants.LEADING, true, null,
+                            FILE_COMPARATOR),
+                    new ShellFolderColumnInfo(COLUMN_SIZE, 75,
+                            SwingConstants.RIGHT, true, null,
+                            DEFAULT_COMPARATOR, true),
+                    new ShellFolderColumnInfo(COLUMN_DATE, 130,
+                            SwingConstants.LEADING, true, null,
+                            DEFAULT_COMPARATOR, true)
+            };
+        }
+
+        return columns;
     }
 
     public ShellFolderColumnInfo[] getFolderColumns() {
         return null;
     }
 
+    public static Object getFolderColumnValue(File file, int column) {
+        if (file instanceof ShellFolder) {
+            Object value = ((ShellFolder)file).getFolderColumnValue(column);
+            if (value != null) {
+                return value;
+            }
+        }
+
+        if (file == null || !file.exists()) {
+            return null;
+        }
+
+        switch (column) {
+            case 0:
+                // By default, file name will be rendered using getSystemDisplayName()
+                return file;
+
+            case 1: // size
+                return file.isDirectory() ? null : Long.valueOf(file.length());
+
+            case 2: // date
+                if (isFileSystemRoot(file)) {
+                    return null;
+                }
+                long time = file.lastModified();
+                return (time == 0L) ? null : new Date(time);
+
+            default:
+                return null;
+        }
+    }
+
     public Object getFolderColumnValue(int column) {
         return null;
     }
+
+    /**
+     * Provides a default comparator for the default column set
+     */
+    private static final Comparator DEFAULT_COMPARATOR = new Comparator() {
+        public int compare(Object o1, Object o2) {
+            int gt;
+
+            if (o1 == null && o2 == null) {
+                gt = 0;
+            } else if (o1 != null && o2 == null) {
+                gt = 1;
+            } else if (o1 == null && o2 != null) {
+                gt = -1;
+            } else if (o1 instanceof Comparable) {
+                gt = ((Comparable) o1).compareTo(o2);
+            } else {
+                gt = 0;
+            }
+
+            return gt;
+        }
+    };
+
+    private static final Comparator<File> FILE_COMPARATOR = new Comparator<File>() {
+        public int compare(File f1, File f2) {
+            ShellFolder sf1 = null;
+            ShellFolder sf2 = null;
+
+            if (f1 instanceof ShellFolder) {
+                sf1 = (ShellFolder) f1;
+                if (sf1.isFileSystem()) {
+                    sf1 = null;
+                }
+            }
+            if (f2 instanceof ShellFolder) {
+                sf2 = (ShellFolder) f2;
+                if (sf2.isFileSystem()) {
+                    sf2 = null;
+                }
+            }
+
+            if (sf1 != null && sf2 != null) {
+                return sf1.compareTo(sf2);
+            } else if (sf1 != null) {
+                // Non-file shellfolders sort before files
+                return -1;
+            } else if (sf2 != null) {
+                return 1;
+            } else {
+                String name1 = f1.getName();
+                String name2 = f2.getName();
+
+                // First ignore case when comparing
+                int diff = name1.compareToIgnoreCase(name2);
+                if (diff != 0) {
+                    return diff;
+                } else {
+                    // May differ in case (e.g. "mail" vs. "Mail")
+                    // We need this test for consistent sorting
+                    return name1.compareTo(name2);
+                }
+            }
+        }
+    };
 }
--- a/src/share/classes/sun/awt/shell/ShellFolderManager.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/share/classes/sun/awt/shell/ShellFolderManager.java	Wed Jun 25 16:44:55 2008 -0700
@@ -27,8 +27,6 @@
 
 import java.io.File;
 import java.io.FileNotFoundException;
-import java.util.*;
-import javax.swing.SwingConstants;
 
 /**
  * @author Michael Martak
@@ -36,10 +34,6 @@
  */
 
 class ShellFolderManager {
-    private static final String COLUMN_NAME = "FileChooser.fileNameHeaderText";
-    private static final String COLUMN_SIZE = "FileChooser.fileSizeHeaderText";
-    private static final String COLUMN_DATE = "FileChooser.fileDateHeaderText";
-
     /**
      * Create a shell folder from a file.
      * Override to return machine-dependent behavior.
@@ -107,142 +101,4 @@
         }
         return (dir.getParentFile() == null);
     }
-
-    public void sortFiles(List files) {
-        Collections.sort(files, fileComparator);
-    }
-
-    private Comparator fileComparator = new Comparator() {
-        public int compare(Object a, Object b) {
-            return compare((File)a, (File)b);
-        }
-
-        public int compare(File f1, File f2) {
-            ShellFolder sf1 = null;
-            ShellFolder sf2 = null;
-
-            if (f1 instanceof ShellFolder) {
-                sf1 = (ShellFolder)f1;
-                if (sf1.isFileSystem()) {
-                    sf1 = null;
-                }
-            }
-            if (f2 instanceof ShellFolder) {
-                sf2 = (ShellFolder)f2;
-                if (sf2.isFileSystem()) {
-                    sf2 = null;
-                }
-            }
-
-            if (sf1 != null && sf2 != null) {
-                return sf1.compareTo(sf2);
-            } else if (sf1 != null) {
-                return -1;      // Non-file shellfolders sort before files
-            } else if (sf2 != null) {
-                return 1;
-            } else {
-                String name1 = f1.getName();
-                String name2 = f2.getName();
-
-                // First ignore case when comparing
-                int diff = name1.toLowerCase().compareTo(name2.toLowerCase());
-                if (diff != 0) {
-                    return diff;
-                } else {
-                    // May differ in case (e.g. "mail" vs. "Mail")
-                    // We need this test for consistent sorting
-                    return name1.compareTo(name2);
-                }
-            }
-        }
-    };
-
-    public ShellFolderColumnInfo[] getFolderColumns(File dir) {
-        ShellFolderColumnInfo[] columns = null;
-
-        if (dir instanceof ShellFolder) {
-            columns = ((ShellFolder)dir).getFolderColumns();
-        }
-
-        if (columns == null) {
-            columns = new ShellFolderColumnInfo[]{
-                new ShellFolderColumnInfo(COLUMN_NAME, 150,
-                        SwingConstants.LEADING, true, null,
-                        fileComparator),
-                new ShellFolderColumnInfo(COLUMN_SIZE, 75,
-                        SwingConstants.RIGHT, true, null,
-                        ComparableComparator.getInstance(), true),
-                new ShellFolderColumnInfo(COLUMN_DATE, 130,
-                        SwingConstants.LEADING, true, null,
-                        ComparableComparator.getInstance(), true)
-            };
-        }
-
-        return columns;
-    }
-
-    public Object getFolderColumnValue(File file, int column) {
-        if (file instanceof ShellFolder) {
-            Object value = ((ShellFolder)file).getFolderColumnValue(column);
-            if (value != null) {
-                return value;
-            }
-        }
-
-        if (file == null || !file.exists()) {
-            return null;
-        }
-
-        switch (column) {
-            case 0:
-                // By default, file name will be rendered using getSystemDisplayName()
-                return file;
-
-            case 1: // size
-                return file.isDirectory() ? null : new Long(file.length());
-
-            case 2: // date
-                if (isFileSystemRoot(file)) {
-                    return null;
-                }
-                long time = file.lastModified();
-                return (time == 0L) ? null : new Date(time);
-
-            default:
-                return null;
-        }
-    }
-
-    /**
-     * This class provides a default comparator for the default column set
-     */
-    private static class ComparableComparator implements Comparator {
-        private static Comparator instance;
-
-        public static Comparator getInstance() {
-            if (instance == null) {
-                instance = new ComparableComparator();
-            }
-            return instance;
-        }
-
-        public int compare(Object o1, Object o2) {
-            int gt;
-
-            if (o1 == null && o2 == null) {
-                gt = 0;
-            } else if (o1 != null && o2 == null) {
-                gt = 1;
-            } else if (o1 == null && o2 != null) {
-                gt = -1;
-            } else if (o1 instanceof Comparable) {
-                gt = ((Comparable) o1).compareTo(o2);
-            } else {
-                gt = 0;
-            }
-
-            return gt;
-        }
-    }
-
 }
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java	Wed Jun 25 16:44:55 2008 -0700
@@ -306,7 +306,7 @@
      * <code>java.io.File</code> instead. If not, then the object depends
      * on native PIDL state and should not be serialized.
      *
-     * @returns a <code>java.io.File</code> replacement object. If the folder
+     * @return a <code>java.io.File</code> replacement object. If the folder
      * is a not a normal directory, then returns the first non-removable
      * drive (normally "C:\").
      */
@@ -605,10 +605,10 @@
         // parent so we have an IShellFolder to query.
         long pIShellFolder = getIShellFolder();
         // Now we can enumerate the objects in this folder.
-        ArrayList list = new ArrayList();
+        ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
         long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles);
         if (pEnumObjects != 0) {
-            long childPIDL = 0;
+            long childPIDL;
             int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
             do {
                 if (Thread.currentThread().isInterrupted()) {
@@ -635,7 +635,7 @@
             } while (childPIDL != 0);
             releaseEnumObjects(pEnumObjects);
         }
-        return (ShellFolder[])list.toArray(new ShellFolder[list.size()]);
+        return list.toArray(new ShellFolder[list.size()]);
     }
 
 
@@ -648,7 +648,7 @@
         long pIShellFolder = getIShellFolder();
         long pEnumObjects =  getEnumObjects(pIShellFolder, true);
         Win32ShellFolder2 child = null;
-        long childPIDL = 0;
+        long childPIDL;
 
         while ((childPIDL = getNextChild(pEnumObjects)) != 0) {
             if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) {
@@ -983,7 +983,7 @@
                             ? SwingConstants.CENTER
                                 : SwingConstants.LEADING);
 
-                    column.setComparator(new ColumnComparator(i));
+                    column.setComparator(new ColumnComparator(getIShellFolder(), i));
 
                     notNullColumns.add(column);
                 }
@@ -1002,22 +1002,29 @@
 
     private native Object doGetColumnValue(long parentIShellFolder2, long childPIDL, int columnIdx);
 
-    private native int compareIDsByColumn(long pParentIShellFolder, long pidl1, long pidl2, int columnIdx);
+    private static native int compareIDsByColumn(long pParentIShellFolder, long pidl1, long pidl2, int columnIdx);
 
 
-    private class ColumnComparator implements Comparator {
+    public void sortChildren(List<? extends File> files) {
+        Collections.sort(files, new ColumnComparator(getIShellFolder(), 0));
+    }
+
+    private static class ColumnComparator implements Comparator<File> {
+        private final long parentIShellFolder;
+
         private final int columnIdx;
 
-        public ColumnComparator(int columnIdx) {
+        public ColumnComparator(long parentIShellFolder, int columnIdx) {
+            this.parentIShellFolder = parentIShellFolder;
             this.columnIdx = columnIdx;
         }
 
         // compares 2 objects within this folder by the specified column
-        public int compare(Object o, Object o1) {
+        public int compare(File o, File o1) {
             if (o instanceof Win32ShellFolder2
                     && o1 instanceof Win32ShellFolder2) {
                 // delegates comparison to native method
-                return compareIDsByColumn(getIShellFolder(),
+                return compareIDsByColumn(parentIShellFolder,
                         ((Win32ShellFolder2) o).getRelativePIDL(),
                         ((Win32ShellFolder2) o1).getRelativePIDL(),
                         columnIdx);
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java	Fri Jun 20 16:34:34 2008 -0700
+++ b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java	Wed Jun 25 16:44:55 2008 -0700
@@ -234,11 +234,11 @@
                         // Add third level for "My Computer"
                         if (folder.equals(drives)) {
                             File[] thirdLevelFolders = folder.listFiles();
-                            if (thirdLevelFolders != null) {
-                                Arrays.sort(thirdLevelFolders, driveComparator);
-                                for (File thirdLevelFolder : thirdLevelFolders) {
-                                    folders.add(thirdLevelFolder);
-                                }
+                            if (thirdLevelFolders != null && thirdLevelFolders.length > 0) {
+                                List<File> thirdLevelFoldersList = Arrays.asList(thirdLevelFolders);
+
+                                folder.sortChildren(thirdLevelFoldersList);
+                                folders.addAll(thirdLevelFoldersList);
                             }
                         }
                     }
@@ -362,27 +362,6 @@
         return false;
     }
 
-    private Comparator driveComparator = new Comparator() {
-        public int compare(Object o1, Object o2) {
-            Win32ShellFolder2 shellFolder1 = (Win32ShellFolder2) o1;
-            Win32ShellFolder2 shellFolder2 = (Win32ShellFolder2) o2;
-
-            // Put drives at first
-            boolean isDrive1 = shellFolder1.getPath().endsWith(":\\");
-
-            if (isDrive1 ^ shellFolder2.getPath().endsWith(":\\")) {
-                return isDrive1 ? -1 : 1;
-            } else {
-                return shellFolder1.getPath().compareTo(shellFolder2.getPath());
-            }
-        }
-    };
-
-
-    public void sortFiles(List files) {
-        Collections.sort(files, fileComparator);
-    }
-
     private static List topFolderList = null;
     static int compareShellFolders(Win32ShellFolder2 sf1, Win32ShellFolder2 sf2) {
         boolean special1 = sf1.isSpecial();
@@ -418,19 +397,9 @@
         return compareNames(sf1.getAbsolutePath(), sf2.getAbsolutePath());
     }
 
-    static int compareFiles(File f1, File f2) {
-        if (f1 instanceof Win32ShellFolder2) {
-            return f1.compareTo(f2);
-        }
-        if (f2 instanceof Win32ShellFolder2) {
-            return -1 * f2.compareTo(f1);
-        }
-        return compareNames(f1.getName(), f2.getName());
-    }
-
     static int compareNames(String name1, String name2) {
         // First ignore case when comparing
-        int diff = name1.toLowerCase().compareTo(name2.toLowerCase());
+        int diff = name1.compareToIgnoreCase(name2);
         if (diff != 0) {
             return diff;
         } else {
@@ -439,14 +408,4 @@
             return name1.compareTo(name2);
         }
     }
-
-    private Comparator fileComparator = new Comparator() {
-        public int compare(Object a, Object b) {
-            return compare((File)a, (File)b);
-        }
-
-        public int compare(File f1, File f2) {
-            return compareFiles(f1, f2);
-        }
-    };
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/beans/XMLEncoder/java_io_File.java	Wed Jun 25 16:44:55 2008 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6708550
+ * @summary Tests File encoding
+ * @author Sergey Malenkov
+ */
+
+import java.io.File;
+
+public final class java_io_File extends AbstractTest<File> {
+    public static void main(String[] args) {
+        new java_io_File().test(true);
+    }
+
+    @Override
+    protected File getObject() {
+        return new File("test.txt"); // NON-NLS: local file
+    }
+
+    @Override
+    protected File getAnotherObject() {
+        return new File("/pub/demo/"); // NON-NLS: path
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JPopupMenu/6694823/bug6694823.java	Wed Jun 25 16:44:55 2008 -0700
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6694823
+ * @summary Checks that popup menu cannot be partially hidden
+ * by the task bar in applets.
+ * @author Mikhail Lapshin
+ * @run main bug6694823
+ */
+
+import javax.swing.*;
+import java.awt.*;
+import sun.awt.SunToolkit;
+
+public class bug6694823 {
+    private static JFrame frame;
+    private static JPopupMenu popup;
+    private static SunToolkit toolkit;
+    private static Insets screenInsets;
+
+    public static void main(String[] args) throws Exception {
+        toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                createGui();
+            }
+        });
+
+        // Get screen insets
+        screenInsets = toolkit.getScreenInsets(frame.getGraphicsConfiguration());
+        if (screenInsets.bottom == 0) {
+            // This test is only for configurations with taskbar on the bottom
+            return;
+        }
+
+        // Show popup as if from a standalone application
+        // The popup should be able to overlap the task bar
+        showPopup(false);
+
+        // Emulate applet security restrictions
+        toolkit.realSync();
+        System.setSecurityManager(new SecurityManager());
+
+        // Show popup as if from an applet
+        // The popup shouldn't overlap the task bar. It should be shifted up.
+        showPopup(true);
+
+        toolkit.realSync();
+        System.out.println("Test passed!");
+        frame.dispose();
+    }
+
+    private static void createGui() {
+        frame = new JFrame();
+        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+        frame.setUndecorated(true);
+
+        popup = new JPopupMenu("Menu");
+        for (int i = 0; i < 7; i++) {
+            popup.add(new JMenuItem("MenuItem"));
+        }
+        JPanel panel = new JPanel();
+        panel.setComponentPopupMenu(popup);
+        frame.add(panel);
+
+        frame.setSize(200, 200);
+    }
+
+    private static void showPopup(final boolean shouldBeShifted) {
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                // Place frame just above the task bar
+                Dimension screenSize = toolkit.getScreenSize();
+                frame.setLocation(screenSize.width / 2,
+                        screenSize.height - frame.getHeight() - screenInsets.bottom);
+                frame.setVisible(true);
+
+                // Place popup over the task bar
+                Point frameLoc = frame.getLocationOnScreen();
+                int x = 0;
+                int y = frame.getHeight()
+                        - popup.getPreferredSize().height + screenInsets.bottom;
+                popup.show(frame, x, y);
+
+                if (shouldBeShifted) {
+                    if (popup.getLocationOnScreen()
+                            .equals(new Point(frameLoc.x, frameLoc.y + y))) {
+                        throw new RuntimeException("Popup is not shifted");
+                    }
+                } else {
+                    if (!popup.getLocationOnScreen()
+                            .equals(new Point(frameLoc.x, frameLoc.y + y))) {
+                        throw new RuntimeException("Popup is unexpectedly shifted");
+                    }
+                }
+                popup.setVisible(false);
+            }
+        });
+    }
+}
Binary file test/javax/swing/JSlider/4987336/box.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JSlider/4987336/bug4987336.html	Wed Jun 25 16:44:55 2008 -0700
@@ -0,0 +1,9 @@
+<html>
+<body>
+<applet  code="bug4987336.class" width=600 height=400></applet>
+There are four Sliders. Each of them has a label with animated gif (a cup of coffee)
+and a label with static image.
+
+Check that for every LAF animation works for all Sliders. 
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JSlider/4987336/bug4987336.java	Wed Jun 25 16:44:55 2008 -0700
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 4987336
+   @summary JSlider doesn't show label's animated icon.
+   @author Pavel Porvatov
+   @run applet/manual=done bug4987336.html
+*/
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Hashtable;
+
+public class bug4987336 extends JApplet {
+    private static final String IMAGE_RES = "box.gif";
+
+    private static final String ANIM_IMAGE_RES = "cupanim.gif";
+
+    public void init() {
+        JPanel pnLafs = new JPanel();
+        pnLafs.setLayout(new BoxLayout(pnLafs, BoxLayout.Y_AXIS));
+
+        ButtonGroup group = new ButtonGroup();
+
+        pnLafs.setBorder(new TitledBorder("Available Lafs"));
+
+        for (UIManager.LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) {
+            LafRadioButton comp = new LafRadioButton(lafInfo);
+
+            pnLafs.add(comp);
+            group.add(comp);
+        }
+
+        JPanel pnContent = new JPanel();
+
+        pnContent.setLayout(new BoxLayout(pnContent, BoxLayout.Y_AXIS));
+
+        pnContent.add(pnLafs);
+        pnContent.add(createSlider(true, IMAGE_RES, IMAGE_RES, ANIM_IMAGE_RES, ANIM_IMAGE_RES));
+        pnContent.add(createSlider(false, IMAGE_RES, IMAGE_RES, ANIM_IMAGE_RES, ANIM_IMAGE_RES));
+        pnContent.add(createSlider(true, ANIM_IMAGE_RES, null, IMAGE_RES, IMAGE_RES));
+        pnContent.add(createSlider(false, ANIM_IMAGE_RES, null, IMAGE_RES, IMAGE_RES));
+
+        getContentPane().add(new JScrollPane(pnContent));
+    }
+
+    private static JSlider createSlider(boolean enabled,
+                                        String firstEnabledImage, String firstDisabledImage,
+                                        String secondEnabledImage, String secondDisabledImage) {
+        Hashtable<Integer, JComponent> dictionary = new Hashtable<Integer, JComponent>();
+
+        dictionary.put(0, createLabel(firstEnabledImage, firstDisabledImage));
+        dictionary.put(1, createLabel(secondEnabledImage, secondDisabledImage));
+
+        JSlider result = new JSlider(0, 1);
+
+        result.setLabelTable(dictionary);
+        result.setPaintLabels(true);
+        result.setEnabled(enabled);
+
+        return result;
+    }
+
+    private static JLabel createLabel(String enabledImage, String disabledImage) {
+        ImageIcon enabledIcon = enabledImage == null ? null :
+                new ImageIcon(bug4987336.class.getResource(enabledImage));
+
+        ImageIcon disabledIcon = disabledImage == null ? null :
+                new ImageIcon(bug4987336.class.getResource(disabledImage));
+
+        JLabel result = new JLabel(enabledImage == null && disabledImage == null ? "No image" : "Image",
+                enabledIcon, SwingConstants.LEFT);
+
+        result.setDisabledIcon(disabledIcon);
+
+        return result;
+    }
+
+    private class LafRadioButton extends JRadioButton {
+        public LafRadioButton(final UIManager.LookAndFeelInfo lafInfo) {
+            super(lafInfo.getName(), lafInfo.getName().equals(UIManager.getLookAndFeel().getName()));
+
+            addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    try {
+                        UIManager.setLookAndFeel(lafInfo.getClassName());
+
+                        SwingUtilities.updateComponentTreeUI(bug4987336.this);
+                    } catch (Exception ex) {
+                        // Ignore such errors
+                        System.out.println("Cannot set LAF " + lafInfo.getName());
+                    }
+                }
+            });
+        }
+    }
+}
Binary file test/javax/swing/JSlider/4987336/cupanim.gif has changed