From 1f1d82e2aaf3960f1ddcd601d86cf85258c6d05a Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Mon, 24 Mar 2008 15:51:26 +0300 Subject: [PATCH 01/46] 6637607: 1st char. is discarded after a modal dialogue shows up and disappears Reset consuming next KEY_TYPED on every subsequent KEY_PRESS. Reviewed-by: son --- .../java/awt/DefaultKeyboardFocusManager.java | 3 + .../native/sun/windows/awt_Component.cpp | 4 + .../ConsumeNextKeyTypedOnModalShowTest.java | 110 ++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 jdk/test/java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java diff --git a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java index 1874d8bb3e3..9e2c6e5620d 100644 --- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -1078,6 +1078,9 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { focusNextComponent(focusedComponent); } return; + } else if (e.getID() == KeyEvent.KEY_PRESSED) { + // Fix for 6637607: consumeNextKeyTyped should be reset. + consumeNextKeyTyped = false; } toTest = focusedComponent.getFocusTraversalKeys( diff --git a/jdk/src/windows/native/sun/windows/awt_Component.cpp b/jdk/src/windows/native/sun/windows/awt_Component.cpp index f5823786110..f2f59b859cc 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp @@ -5740,6 +5740,10 @@ void AwtComponent::_NativeHandleEvent(void *param) env->DeleteGlobalRef(event); delete nhes; return; + + } else if (id == java_awt_event_KeyEvent_KEY_PRESSED) { + // Fix for 6637607: reset consuming + keyDownConsumed = FALSE; } /* Consume a KEY_TYPED event if a KEY_PRESSED had been, to support diff --git a/jdk/test/java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java b/jdk/test/java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java new file mode 100644 index 00000000000..801dc2e6e17 --- /dev/null +++ b/jdk/test/java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java @@ -0,0 +1,110 @@ +/* + * 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 %W% %E% + @bug 6637607 + @summary Showing a modal dlg on TAB KEY_PRESS shouldn't consume inappropriate KEY_TYPED. + @author Anton Tarasov: area=awt-focus + @library ../../regtesthelpers + @build Util + @run main ConsumeNextKeyTypedOnModalShowTest +*/ + +import java.awt.*; +import java.awt.event.*; +import java.applet.Applet; +import java.util.concurrent.atomic.AtomicBoolean; +import java.lang.reflect.InvocationTargetException; +import test.java.awt.regtesthelpers.Util; + +public class ConsumeNextKeyTypedOnModalShowTest extends Applet { + Robot robot; + Frame frame = new Frame("Frame"); + Dialog dialog = new Dialog(frame, "Dialog", true); + TextField tf0 = new TextField(); + TextField tf1 = new TextField(); + Button button = new Button("Button"); + + public static void main(String[] args) { + ConsumeNextKeyTypedOnModalShowTest app = new ConsumeNextKeyTypedOnModalShowTest(); + app.init(); + app.start(); + } + + public void init() { + robot = Util.createRobot(); + + tf0.setPreferredSize(new Dimension(50, 30)); + tf1.setPreferredSize(new Dimension(50, 30)); + frame.setLayout(new FlowLayout()); + frame.add(tf0); + frame.add(tf1); + frame.pack(); + + dialog.add(button); + dialog.pack(); + + Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { + public void eventDispatched(AWTEvent e) { + if (e.getID() == KeyEvent.KEY_PRESSED && e.getSource() == tf0) { + dialog.setVisible(true); + } + } + }, KeyEvent.KEY_EVENT_MASK); + } + + public void start() { + frame.setVisible(true); + Util.waitTillShown(frame); + + // Show the dialog. + robot.keyPress(KeyEvent.VK_TAB); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_TAB); + + Util.waitForIdle(robot); + + // Dispose the dialog. + Runnable action = new Runnable() { + public void run() { + dialog.dispose(); + } + }; + if (!Util.trackFocusGained(tf1, action, 2000, false)) { + throw new RuntimeException("Test failed: TAB was processed incorrectly!"); + } + + // Check for type-ability. + robot.keyPress(KeyEvent.VK_A); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_A); + + Util.waitForIdle(robot); + + if (tf1.getText().equals("")) { + throw new RuntimeException("Test failed: couldn't type a char!"); + } + System.out.println("Test passed."); + } +} From 87e915d1afc52fc4204713c842e7af3ae84dc3c7 Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Mon, 24 Mar 2008 18:24:15 +0300 Subject: [PATCH 02/46] 6638872: invalid links Removed invalid links Reviewed-by: dcherepanov --- jdk/src/share/classes/java/awt/event/TextEvent.java | 3 +-- jdk/src/share/classes/java/awt/event/TextListener.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/jdk/src/share/classes/java/awt/event/TextEvent.java b/jdk/src/share/classes/java/awt/event/TextEvent.java index a8636dc0d78..0c7aadca177 100644 --- a/jdk/src/share/classes/java/awt/event/TextEvent.java +++ b/jdk/src/share/classes/java/awt/event/TextEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -43,7 +43,6 @@ import java.awt.AWTEvent; * * @see java.awt.TextComponent * @see TextListener - * @see Tutorial: Writing a Text Listener * * @since 1.1 */ diff --git a/jdk/src/share/classes/java/awt/event/TextListener.java b/jdk/src/share/classes/java/awt/event/TextListener.java index cbb615a4606..99e52c2e4e1 100644 --- a/jdk/src/share/classes/java/awt/event/TextListener.java +++ b/jdk/src/share/classes/java/awt/event/TextListener.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -40,7 +40,6 @@ import java.util.EventListener; * @author Georges Saab * * @see TextEvent - * @see Tutorial: Writing a Text Listener * * @since 1.1 */ From 88699393d78a786ac5b64c104075a9cafb5eff24 Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Tue, 25 Mar 2008 15:16:03 +0300 Subject: [PATCH 03/46] 6610244: modal dialog closes with fatal error if -Xcheck:jni is set Obtain WWindowPeer class every time it is required Reviewed-by: art --- .../windows/native/sun/windows/awt_Dialog.cpp | 10 ++- .../windows/native/sun/windows/awt_Window.cpp | 10 +-- .../windows/native/sun/windows/awt_Window.h | 7 +- .../Dialog/CrashXCheckJni/CrashXCheckJni.java | 64 +++++++++++++++++++ 4 files changed, 73 insertions(+), 18 deletions(-) create mode 100644 jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java diff --git a/jdk/src/windows/native/sun/windows/awt_Dialog.cpp b/jdk/src/windows/native/sun/windows/awt_Dialog.cpp index 0c98fc0d9fe..948fc0883ed 100644 --- a/jdk/src/windows/native/sun/windows/awt_Dialog.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Dialog.cpp @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -428,8 +428,12 @@ void AwtDialog::ModalActivateNextWindow(HWND dialogHWnd, { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jlongArray windows = (jlongArray)(env->CallStaticObjectMethod(AwtWindow::wwindowPeerCls, - AwtWindow::getActiveWindowsMID)); + jclass wwindowPeerCls = env->FindClass("sun/awt/windows/WWindowPeer"); + jmethodID getActiveWindowsMID = env->GetStaticMethodID(wwindowPeerCls, + "getActiveWindowHandles", "()[J"); + DASSERT(getActiveWindowsMID != NULL); + jlongArray windows = (jlongArray)(env->CallStaticObjectMethod(wwindowPeerCls, + getActiveWindowsMID)); if (windows == NULL) { return; } diff --git a/jdk/src/windows/native/sun/windows/awt_Window.cpp b/jdk/src/windows/native/sun/windows/awt_Window.cpp index 7e2f31fb139..2d94c779309 100644 --- a/jdk/src/windows/native/sun/windows/awt_Window.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Window.cpp @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -122,9 +122,6 @@ jfieldID AwtWindow::warningStringID; jfieldID AwtWindow::locationByPlatformID; jfieldID AwtWindow::autoRequestFocusID; -jclass AwtWindow::wwindowPeerCls; -jmethodID AwtWindow::getActiveWindowsMID; - jfieldID AwtWindow::sysXID; jfieldID AwtWindow::sysYID; jfieldID AwtWindow::sysWID; @@ -2159,11 +2156,6 @@ Java_sun_awt_windows_WWindowPeer_initIDs(JNIEnv *env, jclass cls) { TRY; - AwtWindow::wwindowPeerCls = cls; - AwtWindow::getActiveWindowsMID = - env->GetStaticMethodID(cls, "getActiveWindowHandles", "()[J"); - DASSERT(AwtWindow::getActiveWindowsMID != NULL); - AwtWindow::sysXID = env->GetFieldID(cls, "sysX", "I"); AwtWindow::sysYID = env->GetFieldID(cls, "sysY", "I"); AwtWindow::sysWID = env->GetFieldID(cls, "sysW", "I"); diff --git a/jdk/src/windows/native/sun/windows/awt_Window.h b/jdk/src/windows/native/sun/windows/awt_Window.h index 8e654a2d813..bc706d97aeb 100644 --- a/jdk/src/windows/native/sun/windows/awt_Window.h +++ b/jdk/src/windows/native/sun/windows/awt_Window.h @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -57,11 +57,6 @@ public: static jfieldID screenID; /* screen number passed over from WindowPeer */ static jfieldID autoRequestFocusID; - /* WWindowPeer class */ - static jclass wwindowPeerCls; - /* long[] getActiveWindowHandles() method in WWindowPeer */ - static jmethodID getActiveWindowsMID; - // The coordinates at the peer. static jfieldID sysXID; static jfieldID sysYID; diff --git a/jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java b/jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java new file mode 100644 index 00000000000..377fae51c78 --- /dev/null +++ b/jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java @@ -0,0 +1,64 @@ +/* + * 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 6610244 + @library ../../regtesthelpers + @build Util Sysout AbstractTest + @summary modal dialog closes with fatal error if -Xcheck:jni is set + @author Andrei Dmitriev : area=awt.dialog + @run main/othervm -Xcheck:jni CrashXCheckJni +*/ + +import java.awt.*; +import java.awt.event.*; +import java.util.Timer; +import java.util.TimerTask; +import test.java.awt.regtesthelpers.Util; +import test.java.awt.regtesthelpers.AbstractTest; +import test.java.awt.regtesthelpers.Sysout; + +public class CrashXCheckJni { + + public static void main(String []s) + { + final Dialog fd = new Dialog(new Frame(), true); + Timer t = new Timer(); + t.schedule(new TimerTask() { + + public void run() { + System.out.println("RUNNING TASK"); + fd.setVisible(false); + fd.dispose(); + System.out.println("FINISHING TASK"); + } + }, 3000L); + + fd.setVisible(true); + t.cancel(); + Util.waitForIdle(null); + + AbstractTest.pass(); + } +} From f555fe0a5754beba24f7e5b9a6f2724e5270b436 Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Tue, 25 Mar 2008 16:23:09 +0300 Subject: [PATCH 04/46] 6255653: REGRESSION: Override isLightweight() causes access violation in awt.dll Verufy that the component to restack is a HW component by checking for instanceof WComponentPeer Reviewed-by: son, anthony --- .../classes/sun/awt/windows/WPanelPeer.java | 14 +- .../IsLightweightCrash.java | 59 ++++++ .../isLightweightCrash/StubPeerCrash.java | 188 ++++++++++++++++++ 3 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 jdk/test/java/awt/Component/isLightweightCrash/IsLightweightCrash.java create mode 100644 jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java diff --git a/jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java b/jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java index 04b07ca082b..ea060b24c28 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java +++ b/jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java @@ -30,9 +30,11 @@ import java.awt.peer.*; import java.util.Vector; import sun.awt.SunGraphicsCallback; +import java.util.logging.*; class WPanelPeer extends WCanvasPeer implements PanelPeer { + private static final Logger log = Logger.getLogger("sun.awt.windows.WPanelPeer"); // ComponentPeer overrides public void paint(Graphics g) { @@ -131,8 +133,16 @@ class WPanelPeer extends WCanvasPeer implements PanelPeer { for (int i = 0; i < cont.getComponentCount(); i++) { Component comp = cont.getComponent(i); if (!comp.isLightweight()) { - if (comp.getPeer() != null) { - peers.add(comp.getPeer()); + ComponentPeer peer = comp.getPeer(); + if (peer != null && (peer instanceof WComponentPeer)) + { + peers.add(peer); + } else { + if (log.isLoggable(Level.FINE)) { + log.log(Level.FINE, + "peer of a {0} is null or not a WComponentPeer: {1}.", + new Object[]{comp, peer}); + } } } if (comp.isLightweight() && comp instanceof Container) { diff --git a/jdk/test/java/awt/Component/isLightweightCrash/IsLightweightCrash.java b/jdk/test/java/awt/Component/isLightweightCrash/IsLightweightCrash.java new file mode 100644 index 00000000000..37674dbdcf8 --- /dev/null +++ b/jdk/test/java/awt/Component/isLightweightCrash/IsLightweightCrash.java @@ -0,0 +1,59 @@ +/* + * 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 6255653 + @summary REGRESSION: Override isLightweight() causes access violation in awt.dll + @author Andrei Dmitriev: area=awt-component + @run main IsLightweightCrash +*/ + +/* + * The test may not crash for several times so iteratively continue up to some limit. + */ + +import java.awt.*; + +public class IsLightweightCrash { + public static int ITERATIONS = 20; + + public static void main(String []s) + { + for (int i = 0; i < ITERATIONS; i++){ + showFrame(i); + } + } + + private static void showFrame(int i){ + System.out.println("iteration = "+i); + Frame f = new Frame(); + f.add(new AHeavyweightComponent()); + f.setVisible(true); + f.setVisible(false); + } +} + +class AHeavyweightComponent extends Component { + public boolean isLightweight() { return false; } +} diff --git a/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java b/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java new file mode 100644 index 00000000000..ccdac15f8a6 --- /dev/null +++ b/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java @@ -0,0 +1,188 @@ +/* + * 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 6255653 + @summary REGRESSION: Override isLightweight() causes access violation in awt.dll + @author Andrei Dmitriev: area=awt-component + @run main StubPeerCrash +*/ + +/* + * The test may not crash for several times so iteratively continue up to some limit. + */ + +import java.awt.*; +import java.awt.peer.*; +import java.awt.event.PaintEvent; +import java.awt.image.ImageProducer; +import java.awt.image.ImageObserver; +import java.awt.image.ColorModel; +import java.awt.image.VolatileImage; +import java.awt.GraphicsConfiguration; +import sun.awt.CausedFocusEvent; +import sun.java2d.pipe.Region; + +public class StubPeerCrash { + public static int ITERATIONS = 20; + + public static void main(String []s) + { + for (int i = 0; i < ITERATIONS; i++){ + showFrame(i); + } + } + + private static void showFrame(int i){ + System.out.println("iteration = "+i); + Frame f = new Frame(); + f.add(new AHeavyweightComponent()); + f.setVisible(true); + f.setVisible(false); + } +} + +class AHeavyweightComponent extends Component { + private ComponentPeer peer = new StubComponentPeer(); + + public AHeavyweightComponent(){ + } + + public boolean isLightweight() { + return false; + } + + public ComponentPeer getPeer(){ + return peer; + } +} + +class StubComponentPeer implements ComponentPeer { + public boolean isObscured(){return true;}; + public boolean canDetermineObscurity(){return true;}; + public void setVisible(boolean b){}; + public void setEnabled(boolean b){}; + public void paint(Graphics g){}; + public void repaint(long tm, int x, int y, int width, int height){}; + public void print(Graphics g){}; + public void setBounds(int x, int y, int width, int height, int op){}; + public void handleEvent(AWTEvent e){}; + public void coalescePaintEvent(PaintEvent e){}; + public Point getLocationOnScreen(){return null;}; + public Dimension getPreferredSize(){return null;}; + public Dimension getMinimumSize(){return null;}; + public ColorModel getColorModel(){return null;}; + public Toolkit getToolkit(){return null;}; + public Graphics getGraphics(){return null;}; + public FontMetrics getFontMetrics(Font font){return null;}; + public void dispose(){}; + public void setForeground(Color c){}; + public void setBackground(Color c){}; + public void setFont(Font f){}; + public void updateCursorImmediately(){}; + public boolean requestFocus(Component lightweightChild, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, CausedFocusEvent.Cause cause){ + return true; + }; + public boolean isFocusable(){return true;}; + + public Image createImage(ImageProducer producer){return null;}; + public Image createImage(int width, int height){return null;}; + public VolatileImage createVolatileImage(int width, int height){return null;}; + public boolean prepareImage(Image img, int w, int h, ImageObserver o){return true;}; + public int checkImage(Image img, int w, int h, ImageObserver o){return 0;}; + public GraphicsConfiguration getGraphicsConfiguration(){return null;}; + public boolean handlesWheelScrolling(){return true;}; + public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{}; + public Image getBackBuffer(){return null;}; + public void flip(BufferCapabilities.FlipContents flipAction){}; + public void destroyBuffers(){}; + + /** + * Reparents this peer to the new parent referenced by newContainer peer + * Implementation depends on toolkit and container. + * @param newContainer peer of the new parent container + * @since 1.5 + */ + public void reparent(ContainerPeer newContainer){}; + /** + * Returns whether this peer supports reparenting to another parent withour destroying the peer + * @return true if appropriate reparent is supported, false otherwise + * @since 1.5 + */ + public boolean isReparentSupported(){return true;}; + + /** + * Used by lightweight implementations to tell a ComponentPeer to layout + * its sub-elements. For instance, a lightweight Checkbox needs to layout + * the box, as well as the text label. + */ + public void layout(){}; + + + public Rectangle getBounds(){return null;}; + + /** + * Applies the shape to the native component window. + * @since 1.7 + */ + public void applyShape(Region shape){}; + + /** + * DEPRECATED: Replaced by getPreferredSize(). + */ + public Dimension preferredSize(){return null;}; + + /** + * DEPRECATED: Replaced by getMinimumSize(). + */ + public Dimension minimumSize(){return null;}; + + /** + * DEPRECATED: Replaced by setVisible(boolean). + */ + public void show(){}; + + /** + * DEPRECATED: Replaced by setVisible(boolean). + */ + public void hide(){}; + + /** + * DEPRECATED: Replaced by setEnabled(boolean). + */ + public void enable(){}; + + /** + * DEPRECATED: Replaced by setEnabled(boolean). + */ + public void disable(){}; + + /** + * DEPRECATED: Replaced by setBounds(int, int, int, int). + */ + public void reshape(int x, int y, int width, int height){}; +} From 5b39f2291c5d1102b04e27e7ea9fd58b0db0e233 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Tue, 25 Mar 2008 18:08:57 +0300 Subject: [PATCH 05/46] 6613426: two WM_TAKE_FOCUS messages on one mouse click in GNOME Metacity 2.16.0 A workaround to the metacity issue 485016. Reviewed-by: son --- .../solaris/classes/sun/awt/X11/XDecoratedPeer.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java index 8aa3085282f..a930dfb2be8 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java @@ -1013,6 +1013,16 @@ abstract class XDecoratedPeer extends XWindowPeer { private void handleWmTakeFocus(XClientMessageEvent cl) { focusLog.log(Level.FINE, "WM_TAKE_FOCUS on {0}", new Object[]{this}); + // A workaround to Metacity issue (see 6613426). + // The first check is to skip redundant WM_TAKE_FOCUS on click + // in a focused frame. The second check is to allow requesting focus + // on click in a frame when its owned window is currently focused. + if (this == getNativeFocusedWindowPeer() && + target == XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow()) + { + focusLog.fine("The window is already focused, skipping."); + return; + } requestWindowFocus(cl.get_data(1), true); } From 3a0d8165cea893f89e120b21cee631a164720292 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Wed, 26 Mar 2008 16:20:01 +0300 Subject: [PATCH 06/46] 6680135: A number of test/closed/java/awt/Focus/* tests should be opened The tests moved from the closed repository. Reviewed-by: son --- .../ActualFocusedWindowBlockingTest.java | 333 ++++++++++++ .../ActualFocusedWindowRetaining.java | 430 +++++++++++++++ .../AppletInitialFocusTest.html | 22 + .../AppletInitialFocusTest.java | 103 ++++ .../AppletInitialFocusTest1.html | 22 + .../AppletInitialFocusTest1.java | 94 ++++ .../FrameJumpingToMouse.java | 259 ++++++++++ .../NonfocusableOwnerTest.java | 352 +++++++++++++ .../Focus/NonFocusableWindowTest/Test.java | 417 +++++++++++++++ .../awt/Focus/TypeAhead/TestFocusFreeze.java | 488 ++++++++++++++++++ .../WrongKeyTypedConsumedTest.java | 293 +++++++++++ 11 files changed, 2813 insertions(+) create mode 100644 jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java create mode 100644 jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java create mode 100644 jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html create mode 100644 jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java create mode 100644 jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html create mode 100644 jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java create mode 100644 jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java create mode 100644 jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java create mode 100644 jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java create mode 100644 jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java create mode 100644 jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java diff --git a/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java new file mode 100644 index 00000000000..823c2d0310b --- /dev/null +++ b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java @@ -0,0 +1,333 @@ +/* + * 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 6314575 + @summary Tests that previosly focused owned window doesn't steal focus when an owner's component requests focus. + @author Anton Tarasov: area=awt-focus + @run applet ActualFocusedWindowBlockingTest.html +*/ + +import java.awt.*; +import java.awt.event.*; +import java.applet.Applet; +import java.util.concurrent.atomic.AtomicBoolean; +import java.lang.reflect.InvocationTargetException; +import sun.awt.SunToolkit; + +public class ActualFocusedWindowBlockingTest extends Applet { + Robot robot; + Frame owner = new Frame("Owner Frame"); + Window win = new Window(owner); + Frame frame = new Frame("Auxiliary Frame"); + Button fButton = new Button("frame button") {public String toString() {return "Frame_Button";}}; + Button wButton = new Button("window button") {public String toString() {return "Window_Button";}}; + Button aButton = new Button("auxiliary button") {public String toString() {return "Auxiliary_Button";}}; + + public static void main(String[] args) { + ActualFocusedWindowBlockingTest app = new ActualFocusedWindowBlockingTest(); + app.init(); + app.start(); + } + + public void init() { + // Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + this.setLayout (new BorderLayout ()); + Sysout.createDialogWithInstructions(new String[] + {"Automatic test. Simply wait until it's done."}); + + if ("sun.awt.motif.MToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName())) { + return; + } + + Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { + public void eventDispatched(AWTEvent e) { + Sysout.println("--> " + e); + } + }, FocusEvent.FOCUS_EVENT_MASK | WindowEvent.WINDOW_FOCUS_EVENT_MASK); + + try { + robot = new Robot(); + } catch (AWTException e) { + throw new RuntimeException("Error: unable to create robot", e); + } + owner.add(fButton); + win.add(wButton); + frame.add(aButton); + + owner.setName("OWNER_FRAME"); + win.setName("OWNED_WINDOW"); + frame.setName("AUX_FRAME"); + + tuneAndShowWindows(new Window[] {owner, win, frame}); + } + + public void start() { + if ("sun.awt.motif.MToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName())) { + Sysout.println("No testing on Motif. Test passed."); + return; + } + + Sysout.println("\nTest started:\n"); + + // Test 1. + + clickOnCheckFocus(wButton); + + clickOnCheckFocus(aButton); + + clickOn(fButton); + if (!testFocused(fButton)) { + throw new TestFailedException("The owner's component [" + fButton + "] couldn't be focused by click"); + } + + // Test 2. + + clickOnCheckFocus(wButton); + + clickOnCheckFocus(aButton); + + fButton.requestFocus(); + realSync(); + if (!testFocused(fButton)) { + throw new TestFailedException("The owner's component [" + fButton + "] couldn't be focused by request"); + } + + // Test 3. + + clickOnCheckFocus(wButton); + + clickOnCheckFocus(aButton); + + clickOnCheckFocus(fButton); + + clickOnCheckFocus(aButton); + + clickOn(owner); + if (!testFocused(fButton)) { + throw new TestFailedException("The owner's component [" + fButton + "] couldn't be focused as the most recent focus owner"); + } + + Sysout.println("Test passed."); + } + + void tuneAndShowWindows(Window[] arr) { + int y = 0; + for (Window w: arr) { + w.setLayout(new FlowLayout()); + w.setBounds(100, y, 400, 150); + w.setBackground(Color.blue); + w.setVisible(true); + y += 200; + realSync(); + } + } + + void clickOn(Component c) { + Sysout.println("Test: clicking " + c); + + Point p = c.getLocationOnScreen(); + Dimension d = c.getSize(); + + if (c instanceof Frame) { + robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2); + Sysout.println((p.x + (int)(d.getWidth()/2)) + " " + (p.y + ((Frame)c).getInsets().top/2)); + } else { + robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); + } + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.delay(100); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + + realSync(); + } + + void clickOnCheckFocus(Component c) { + clickOn(c); + if (!testFocused(c)) { + throw new RuntimeException("Error: [" + c + "] couldn't get focus by click."); + } + } + + boolean testFocused(Component c) { + for (int i=0; i<10; i++) { + if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == c) { + return true; + } + realSync(); + } + return false; + } + + void realSync() { + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + } + + class TestFailedException extends RuntimeException { + public TestFailedException(String cause) { + super("Test failed. " + cause); + Sysout.println(cause); + } + } +} + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setLocation(500,0); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff --git a/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java new file mode 100644 index 00000000000..e539e39cd70 --- /dev/null +++ b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java @@ -0,0 +1,430 @@ +/* + * 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 4823903 + @summary Tests actual focused window retaining. + @author Anton Tarasov: area=awt.focus + @run applet ActualFocusedWindowRetaining.html +*/ + +import java.awt.*; +import java.awt.event.*; +import java.lang.reflect.*; +import java.applet.*; + +public class ActualFocusedWindowRetaining extends Applet { + public static Frame frame = new Frame("Other Frame"); + public static Frame owner = new Frame("Test Frame"); + public static Button otherButton1 = new Button("Other Button 1"); + public static Button otherButton2 = new Button("Other Button 2"); + public static Button otherButton3 = new Button("Other Button 3"); + public static Button testButton1 = new Button("Test Button 1"); + public static Button testButton2 = new Button("Test Button 2"); + public static Button testButton3 = new Button("Test Button 3"); + public static Window window1 = new TestWindow(owner, otherButton2, testButton2, 800, 200); + public static Window window2 = new TestWindow(owner, otherButton3, testButton3, 800, 300); + public static int step; + public static Robot robot; + + public static void main(String[] args) { + ActualFocusedWindowRetaining a = new ActualFocusedWindowRetaining(); + a.init(); + a.start(); + } + + public void init() + { + //Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + this.setLayout (new BorderLayout ()); + + String[] instructions = + { + "This is an AUTOMATIC test", + "simply wait until it is done" + }; + Sysout.createDialogWithInstructions( instructions ); + } + + public void start () + { + if (Toolkit.getDefaultToolkit().getClass() + .getName().equals("sun.awt.motif.MToolkit")) { + Sysout.println("No testing on Motif."); + return; + } + + try { + robot = new Robot(); + } catch (AWTException e) { + throw new RuntimeException("Error: unable to create robot", e); + } + + Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { + public void eventDispatched(AWTEvent e) { + Object src = e.getSource(); + Class cls = src.getClass(); + + if (cls == TestWindow.class) { + Sysout.println(e.paramString() + " on <" + (src == window1 ? "Window 1" : "Window 2") + ">"); + } else if (cls == Frame.class) { + Sysout.println(e.paramString() + " on <" + ((Frame)src).getTitle() + ">"); + } else if (cls == Button.class) { + Sysout.println(e.paramString() + " on <" + ((Button)src).getLabel() + ">"); + } else { + Sysout.println(e.paramString() + " on "); + } + } + }, AWTEvent.WINDOW_EVENT_MASK | AWTEvent.WINDOW_FOCUS_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK); + + setSize (200,200); + setVisible(true); + validate(); + + frame.setSize(new Dimension(400, 100)); + frame.setLocation(800, 400); + frame.setVisible(true); + frame.toFront(); + + owner.setLayout(new FlowLayout()); + owner.add(testButton1); + owner.add(otherButton1); + owner.pack(); + owner.setLocation(800, 100); + owner.setSize(new Dimension(400, 100)); + owner.setVisible(true); + owner.toFront(); + waitTillShown(owner); + + window1.setVisible(true); + window2.setVisible(true); + window1.toFront(); + window2.toFront(); + // Wait longer... + waitTillShown(window1); + waitTillShown(window2); + + test(); + + frame.dispose(); + owner.dispose(); + } + + public void test() { + + Button[] butArr = new Button[] {testButton3, testButton2, testButton1}; + Window[] winArr = new Window[] {window2, window1, owner}; + + step = 1; + for (int i = 0; i < 3; i++) { + clickOnCheckFocusOwner(butArr[i]); + clickOnCheckFocusedWindow(frame); + clickOn(owner); + if (!checkFocusedWindow(winArr[i])) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(butArr[i])) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + step++; + } + + step = 4; + clickOnCheckFocusOwner(testButton3); + clickOnCheckFocusOwner(testButton1); + clickOnCheckFocusedWindow(frame); + clickOn(owner); + if (!checkFocusedWindow(owner)) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(testButton1)) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + + step = 5; + clickOnCheckFocusOwner(testButton3); + clickOnCheckFocusOwner(testButton2); + clickOnCheckFocusedWindow(frame); + clickOn(owner); + if (!checkFocusedWindow(window1)) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(testButton2)) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + + step = 6; + clickOnCheckFocusOwner(testButton1); + clickOnCheckFocusOwner(testButton2); + clickOnCheckFocusedWindow(frame); + clickOn(owner); + if (!checkFocusedWindow(window1)) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(testButton2)) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + + step = 7; + clickOnCheckFocusOwner(testButton1); + clickOnCheckFocusOwner(testButton2); + clickOnCheckFocusedWindow(frame); + window1.setVisible(false); + clickOn(owner); + if (!checkFocusedWindow(owner)) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(testButton1)) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + + step = 8; + window1.setVisible(true); + waitTillShown(window1); + clickOnCheckFocusOwner(testButton2); + clickOnCheckFocusedWindow(frame); + clickOn(owner); + if (!checkFocusedWindow(window1)) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(testButton2)) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + } + + boolean checkFocusOwner(Component comp) { + return (comp == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()); + } + + boolean checkFocusedWindow(Window win) { + return (win == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()); + } + + void waitTillShown(Component c) { + ((sun.awt.SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + } + + void clickOnCheckFocusOwner(Component c) { + clickOn(c); + if (!checkFocusOwner(c)) { + stopTest("Error: can't bring a focus on Component by clicking on it"); + } + } + + void clickOnCheckFocusedWindow(Frame f) { + clickOn(f); + if (!checkFocusedWindow(f)) { + stopTest("Error: can't bring a focus on Frame by clicking on it"); + } + } + + void clickOn(Component c) + { + Point p = c.getLocationOnScreen(); + Dimension d = c.getSize(); + + if (c instanceof Frame) { + robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2); + } else { + robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); + } + + pause(100); + robot.mousePress(InputEvent.BUTTON1_MASK); + pause(100); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + + waitForIdle(); + } + + void waitForIdle() { + ((sun.awt.SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + } + + void pause(int msec) { + try { + Thread.sleep(msec); + } catch (InterruptedException e) { + Sysout.println("pause: non-fatal exception caught:"); + e.printStackTrace(); + } + } + + void stopTest(String msg) { + throw new RuntimeException(new String("Step " + step + ": " + msg)); + } +} + +class TestWindow extends Window { + TestWindow(Frame owner, Button otherButton, Button testButton, int x, int y) { + super(owner); + + setLayout(new FlowLayout()); + setLocation(x, y); + add(testButton); + add(otherButton); + pack(); + setBackground(Color.green); + } +} + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html new file mode 100644 index 00000000000..3d3d0c81a62 --- /dev/null +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html @@ -0,0 +1,22 @@ + + + + AppletInitialFocusTest + + + +

AppletInitialFocusTest
Bug ID: 4041703

+ +

See the dialog box (usually in upper left corner) for instructions

+ + + + + diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java new file mode 100644 index 00000000000..e34e6e123a5 --- /dev/null +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java @@ -0,0 +1,103 @@ +/* + * 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 4041703 4096228 4025223 4260929 + @summary Ensures that appletviewer sets a reasonable default focus + for an Applet on start + @author das area=appletviewer + @run shell AppletInitialFocusTest.sh +*/ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; + +class MyKeyboardFocusManager extends DefaultKeyboardFocusManager { + public Window getGlobalFocusedWindow() { + return super.getGlobalFocusedWindow(); + } +} + +public class AppletInitialFocusTest extends Applet { + + Window window; + Button button = new Button("Button"); + MyKeyboardFocusManager manager = new MyKeyboardFocusManager(); + + Object lock = new Object(); + + public void init() { + KeyboardFocusManager.setCurrentKeyboardFocusManager(manager); + + Component parent = this; + while (parent != null && !(parent instanceof Window)) { + parent = parent.getParent(); + } + /* + * This applet is designed to be run only with appletviewer, + * so there always should be a toplevel frame. + */ + if (parent == null) { + synchronized (lock) { + System.err.println("appletviewer not running"); + System.exit(3); + } + } + window = (Window)parent; + + button.addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent e) { + synchronized (lock) { + System.err.println("passed"); + System.exit(0); + } + } + }); + add(button); + } + + public void start() { + Thread thread = new Thread(new Runnable() { + public void run() { + try { + Thread.sleep(1000); + synchronized (lock) { + Window focused = manager.getGlobalFocusedWindow(); + if (window == focused) { + System.err.println("failed"); + System.exit(2); + } else { + System.err.println("window never activated"); + System.err.println(focused); + System.exit(0); + } + } + } catch(InterruptedException e) { + } + } + }); + thread.start(); + } +} diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html new file mode 100644 index 00000000000..cdbcdb48021 --- /dev/null +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html @@ -0,0 +1,22 @@ + + + + AppletInitialFocusTest1 + + + +

AppletInitialFocusTest1
Bug ID: 4517274

+ +

See the dialog box (usually in upper left corner) for instructions

+ + + + + diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java new file mode 100644 index 00000000000..b72c1c99758 --- /dev/null +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java @@ -0,0 +1,94 @@ +/* + * 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 4411534 4517274 + @summary ensures that user's requestFocus() during applet initialization + is not ignored. + @author prs area=appletviewer + @run shell AppletInitialFocusTest1.sh +*/ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; + +public class AppletInitialFocusTest1 extends Applet implements FocusListener { + + Button button1 = new Button("Button1"); + Button button2 = new Button("Button2"); + + Object lock = new Object(); + + public void init() { + + Component parent = this; + while (parent != null && !(parent instanceof Window)) { + parent = parent.getParent(); + } + /* + * This applet is designed to be run only with appletviewer, + * so there always should be a toplevel frame. + */ + if (parent == null) { + synchronized (lock) { + System.err.println("appletviewer not running"); + System.exit(3); + } + } + button1.addFocusListener(this); + button2.addFocusListener(this); + add(button1); + add(button2); + button2.requestFocus(); + } + + public void focusGained(FocusEvent e) { + if (e.getSource() == button1) { + synchronized (lock) { + System.err.println("failed: focus on the wrong button"); + System.exit(2); + } + } + } + + public void focusLost(FocusEvent e) { + } + + public void start() { + Thread thread = new Thread(new Runnable() { + public void run() { + try { + Thread.sleep(10000); + synchronized (lock) { + System.err.println("passed"); + System.exit(0); + } + } catch(InterruptedException e) { + } + } + }); + thread.start(); + } +} diff --git a/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java b/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java new file mode 100644 index 00000000000..54928d2988b --- /dev/null +++ b/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java @@ -0,0 +1,259 @@ +/* + * 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 4752312 +@summary Tests that after moving non-focusable window it ungrabs mouse pointer +@author dom@sparc.spb.su: area=awt.focus +@run applet FrameJumpingToMouse.html +*/ + +// Note there is no @ in front of test above. This is so that the +// harness will not mistake this file as a test file. It should +// only see the html file as a test file. (the harness runs all +// valid test files, so it would run this test twice if this file +// were valid as well as the html file.) +// Also, note the area= after Your Name in the author tag. Here, you +// should put which functional area the test falls in. See the +// AWT-core home page -> test areas and/or -> AWT team for a list of +// areas. +// Note also the 'FrameJumpingToMouse.html' in the run tag. This should +// be changed to the name of the test. + + +/** + * FrameJumpingToMouse.java + * + * summary: + */ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; +import javax.swing.JFrame; + +//Automated tests should run as applet tests if possible because they +// get their environments cleaned up, including AWT threads, any +// test created threads, and any system resources used by the test +// such as file descriptors. (This is normally not a problem as +// main tests usually run in a separate VM, however on some platforms +// such as the Mac, separate VMs are not possible and non-applet +// tests will cause problems). Also, you don't have to worry about +// synchronisation stuff in Applet tests they way you do in main +// tests... + + +public class FrameJumpingToMouse extends Applet +{ + //Declare things used in the test, like buttons and labels here + JFrame frame = new JFrame("Test jumping frame"); + Robot robot = null; + public void init() + { + //Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + + this.setLayout (new BorderLayout ()); + + frame.setFocusableWindowState(false); + frame.setBounds(100, 100, 100, 100); + }//End init() + + public void start () + { + //Get things going. Request focus, set size, et cetera + setSize (200,200); + setVisible(true); + validate(); + + try { + robot = new Robot(); + } catch (Exception e) { + throw new RuntimeException("Can't create robot"); + } + + frame.setVisible(true); + + robot.delay(1000); + + Point frameLoc = frame.getLocationOnScreen(); + robot.mouseMove(frameLoc.x+frame.getWidth()/4, frameLoc.y+frame.getInsets().top/2); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseMove(frameLoc.x+100, frameLoc.y+50); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + + Toolkit.getDefaultToolkit().sync(); + robot.waitForIdle(); + frameLoc = frame.getLocation(); + + robot.mouseMove(frameLoc.x+frame.getWidth()/2, frameLoc.y+frame.getHeight()/2); + + Toolkit.getDefaultToolkit().sync(); + robot.waitForIdle(); + + if (!(frame.getLocation().equals(frameLoc))) { + throw new RuntimeException("Frame is moving to mouse with grab"); + } + }// start() + +}// class FrameJumpingToMouse + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + show(); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff --git a/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java b/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java new file mode 100644 index 00000000000..087eba9dea5 --- /dev/null +++ b/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java @@ -0,0 +1,352 @@ +/* + * 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 6182359 + @summary Tests that Window having non-focusable owner can't be a focus owner. + @author Anton Tarasov: area=awt.focus + @run applet NonfocusableOwnerTest.html +*/ + +import java.awt.*; +import java.awt.event.*; +import java.applet.Applet; +import java.lang.reflect.*; +import java.io.*; + +public class NonfocusableOwnerTest extends Applet { + Robot robot; + Frame frame; + Dialog dialog; + Window window1; + Window window2; + Button button = new Button("button"); +// PrintStream Sysout = System.out; + + public static void main(String[] args) { + NonfocusableOwnerTest test = new NonfocusableOwnerTest(); + test.init(); + test.start(); + } + + public void init() { + try { + robot = new Robot(); + } catch (AWTException e) { + throw new RuntimeException("Error: unable to create robot", e); + } + // Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + this.setLayout (new BorderLayout ()); + } + + public void start() { + Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { + public void eventDispatched(AWTEvent e) { + Sysout.println(e.toString()); + } + }, FocusEvent.FOCUS_EVENT_MASK | WindowEvent.WINDOW_FOCUS_EVENT_MASK | WindowEvent.WINDOW_EVENT_MASK); + + frame = new Frame("Frame"); + frame.setName("Frame-owner"); + dialog = new Dialog(frame, "Dialog"); + dialog.setName("Dialog-owner"); + + window1 = new Window(frame); + window1.setName("1st child"); + window2 = new Window(window1); + window2.setName("2nd child"); + + test1(frame, window1); + test2(frame, window1, window2); + test3(frame, window1, window2); + + window1 = new Window(dialog); + window1.setName("1st child"); + window2 = new Window(window1); + window2.setName("2nd child"); + + test1(dialog, window1); + test2(dialog, window1, window2); + test3(dialog, window1, window2); + + Sysout.println("Test passed."); + } + + void test1(Window owner, Window child) { + Sysout.println("* * * STAGE 1 * * *\nowner=" + owner); + + owner.setFocusableWindowState(false); + owner.setSize(100, 100); + owner.setVisible(true); + + child.add(button); + child.setBounds(0, 300, 100, 100); + child.setVisible(true); + + waitTillShown(child); + + clickOn(button); + if (button == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()) { + throw new RuntimeException("Test Failed."); + } + owner.dispose(); + child.dispose(); + } + + void test2(Window owner, Window child1, Window child2) { + Sysout.println("* * * STAGE 2 * * *\nowner=" + owner); + + owner.setFocusableWindowState(false); + owner.setSize(100, 100); + owner.setVisible(true); + + child1.setFocusableWindowState(true); + child1.setBounds(0, 300, 100, 100); + child1.setVisible(true); + + child2.add(button); + child2.setBounds(0, 500, 100, 100); + child2.setVisible(true); + + clickOn(button); + if (button == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()) { + throw new RuntimeException("Test failed."); + } + owner.dispose(); + child1.dispose(); + child2.dispose(); + } + + void test3(Window owner, Window child1, Window child2) { + Sysout.println("* * * STAGE 3 * * *\nowner=" + owner); + + owner.setFocusableWindowState(true); + owner.setSize(100, 100); + owner.setVisible(true); + + child1.setFocusableWindowState(false); + child1.setBounds(0, 300, 100, 100); + child1.setVisible(true); + + child2.setFocusableWindowState(true); + child2.add(button); + child2.setBounds(0, 500, 100, 100); + child2.setVisible(true); + + clickOn(button); + + System.err.println("focus owner: " + KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()); + if (button != KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()) { + throw new RuntimeException("Test failed."); + } + owner.dispose(); + child1.dispose(); + child2.dispose(); + } + + void clickOn(Component c) { + Point p = c.getLocationOnScreen(); + Dimension d = c.getSize(); + + Sysout.println("Clicking " + c); + + if (c instanceof Frame) { + robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2); + } else { + robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); + } + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + waitForIdle(); + } + + void waitTillShown(Component c) { + while (true) { + try { + Thread.sleep(100); + c.getLocationOnScreen(); + break; + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (IllegalComponentStateException e) {} + } + } + void waitForIdle() { + try { + Toolkit.getDefaultToolkit().sync(); + sun.awt.SunToolkit.flushPendingEvents(); + EventQueue.invokeAndWait( new Runnable() { + public void run() {} // Dummy implementation + }); + } catch(InterruptedException ie) { + Sysout.println("waitForIdle, non-fatal exception caught:"); + ie.printStackTrace(); + } catch(InvocationTargetException ite) { + Sysout.println("waitForIdle, non-fatal exception caught:"); + ite.printStackTrace(); + } + + // wait longer... + robot.delay(200); + } +} + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + System.err.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff --git a/jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java b/jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java new file mode 100644 index 00000000000..e3e7d0645a8 --- /dev/null +++ b/jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java @@ -0,0 +1,417 @@ +/* + * 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 4452384 + @summary Tests that non-focusable windows doesn't generate any focus events when accessed. + @author dom: area=awt.focus + @run main Test +*/ + +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +public class Test extends Frame { + public static final int DEF_WIDTH = 400, + DEF_HEIGHT = 300, + DEF_TOP = 1, + DEF_LEFT = 100, + DEF_ROW = 0, + DEF_COL = 0; + static boolean automatic = true; + static Window[] windows; + static Frame main_frame, jumpingFrame; + static Button focus_button; + static Robot robot; + static void pause(int timeout) { + Toolkit.getDefaultToolkit().sync(); + robot.waitForIdle(); + robot.delay(100); + } + static GlobalListener listener; + public static void main(String[] args) { + + listener = new GlobalListener(); + Toolkit.getDefaultToolkit().addAWTEventListener(listener, + AWTEvent.FOCUS_EVENT_MASK | + AWTEvent.WINDOW_EVENT_MASK); + try{ + robot = new Robot(); + } catch(Exception e) {} + // Create several pairs - focusable Frame with focusable component(button) and non-focusable: + // window, resizable frame, non-resizable frame, dialog, non-resiable dialog + main_frame = new Frame("focusable frame"); + focus_button = new Button("button to focus"); + main_frame.add(focus_button); + main_frame.pack(); + main_frame.setVisible(true); + main_frame.setLocation(10, 600); + main_frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + listener.report(); + System.exit(0); + } + }); + + jumpingFrame = new Frame("Jumping frame"); + jumpingFrame.setBounds(DEF_LEFT, DEF_TOP, DEF_WIDTH, DEF_HEIGHT); + + windows = new Window[7]; + windows[0] = new TestWindow(0, 0, false, main_frame); + //windows[1] = new TestWindow(2, 1, true, main_frame); + windows[2] = new Test(1, 0, false, true); + windows[3] = new Test(2, 0, false, false); + //windows[4] = new Test(3, 0, true, true); + windows[5] = new TestDialog(0, 1, false, true, main_frame); + windows[6] = new TestDialog(1, 1, false, false, main_frame); + if (!automatic) { + int windowInd; + for (windowInd = 0; windowInd < windows.length; windowInd++) { + if (windows[windowInd] != null) { + windows[windowInd].setVisible(true); + } + } + } + // Run the test + // 1. Click on all controls, check for no focus events for non-focusable, right focus events for focusable + // 2. Perform some action with control, check if it works + if (automatic) { + int windowInd; + for (windowInd = 0; windowInd < windows.length; windowInd++) { + if (windows[windowInd] != null) { + windows[windowInd].setVisible(true); + focus_button.requestFocus(); + pause(1000); + + // Verify that click on non-focusable window causes no focus lost on active window + performFocusClick(windows[windowInd]); + focus_button.requestFocus(); + pause(500); + performActionClick(windows[windowInd]); + + // Verify that toFront, toBack doesn't cause non-focusable window to become active + jumpingFrame.setVisible(true); + pause(1000); + jumpingFrame.toBack(); + pause(500); + jumpingFrame.toFront(); + pause(500); + windows[windowInd].toBack(); + pause(500); + windows[windowInd].toFront(); + pause(500); + + // Verify that iconifiyng/deiconfiying and + // zooming/unzooming doesn't cause non-focusable + // window to become active + if (windows[windowInd] instanceof Frame) { + Frame toTest = (Frame)windows[windowInd]; + // Deiconification currently doesn't work! +// toTest.setExtendedState(Frame.ICONIFIED); +// pause(500); +// toTest.setExtendedState(Frame.NORMAL); + pause(500); + toTest.setExtendedState(Frame.MAXIMIZED_BOTH); + pause(500); + toTest.setExtendedState(Frame.NORMAL); + } + + windows[windowInd].dispose(); + jumpingFrame.dispose(); + } + } + pause(1000); + System.err.println("Test finished."); + if (!listener.report()) { + throw new RuntimeException("Test Failed. See error stream output for details"); + } + } + } + static void performFocusClick(Window parent) { + if (parent == null) { + return; + } + for (int compInd = 0; compInd < parent.getComponentCount(); compInd++) { + Component child = parent.getComponent(compInd); + if (child instanceof TestPanel) { + TestPanel pan = (TestPanel)child; + pan.performFocusClicks(robot); + pause(100); + } + } + } + static void performActionClick(Window parent) { + if (parent == null) { + return; + } + for (int compInd = 0; compInd < parent.getComponentCount(); compInd++) { + Component child = parent.getComponent(compInd); + if (child instanceof TestPanel) { + TestPanel pan = (TestPanel)child; + pan.performActionClicks(robot); + pause(100); + } + } + } + public Test(int row, int col, boolean focusable, boolean resizable) { + super("Frame" + row + "" + col); + TestPanel panel = new TestPanel(row, col); + if (Test.automatic) { + row = Test.DEF_ROW; + col = Test.DEF_COL; + } + setName(getTitle()); + add("Center", panel); + Label l = new Label(getClass().getSuperclass().getName() + ", " + (focusable?"focusable":"non-focusable") + + ", " + (resizable?"resizable":"non-resizable")); + l.setBackground(Color.green); + add("North", l); + setBounds(Test.DEF_LEFT + DEF_WIDTH*col, DEF_TOP + DEF_HEIGHT*row, DEF_WIDTH, DEF_HEIGHT); + if (!focusable) { + setFocusableWindowState(false); + } + if (!resizable) { + setResizable(false); + } +// setVisible(true); + } +} +class TestWindow extends Window { + public TestWindow(int row, int col, boolean focusable, Frame owner) { + super(owner); + setName("Window" + row + "" + col); + TestPanel panel = new TestPanel(row, col); + if (Test.automatic) { + row = Test.DEF_ROW; + col = Test.DEF_COL; + } + + add("Center", panel); + Label l = new Label(getClass().getSuperclass().getName() + ", " + (focusable?"focusable":"non-focusable") + + ", " + (false?"resizable":"non-resizable")); + l.setBackground(Color.green); + add("North", l); + + setBounds(Test.DEF_LEFT + Test.DEF_WIDTH*col, Test.DEF_TOP + Test.DEF_HEIGHT*row, Test.DEF_WIDTH, Test.DEF_HEIGHT); + if (!focusable) { + setFocusableWindowState(false); + } +// setVisible(true); + } +} +class TestDialog extends Dialog { + public TestDialog(int row, int col, boolean focusable, boolean resizable, Frame owner) { + super(owner); + setName("Dialog" + row + "" + col); + TestPanel panel = new TestPanel(row, col); + if (Test.automatic) { + row = Test.DEF_ROW; + col = Test.DEF_COL; + } + + add("Center", panel); + Label l = new Label(getClass().getSuperclass().getName() + ", " + (focusable?"focusable":"non-focusable") + + ", " + (resizable?"resizable":"non-resizable")); + l.setBackground(Color.green); + add("North", l); + + setBounds(Test.DEF_LEFT + Test.DEF_WIDTH*col, Test.DEF_TOP + Test.DEF_HEIGHT*row, Test.DEF_WIDTH, Test.DEF_HEIGHT); + if (!focusable) { + setFocusableWindowState(false); + } + if (!resizable) { + setResizable(false); + } +// setVisible(true); + } +} + +class TestPanel extends Panel { + + void clickComponent(Component comp, Robot robot) { + if (comp instanceof Choice) { + return; + } + Point compLoc = comp.getLocationOnScreen(); + Dimension size = comp.getSize(); + robot.mouseMove(compLoc.x + size.width/2, compLoc.y + size.height/2); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + } + void performFocusClicks(Robot robot) { + for (int childInd = 0; childInd < getComponentCount(); childInd++) { + performFocusClick(getComponent(childInd), robot); + } + } + void performFocusClick(Component comp, Robot robot) { + clickComponent(comp, robot); + } + + void performActionClicks(Robot robot) { + for (int childInd = 0; childInd < getComponentCount(); childInd++) { + performActionClick(getComponent(childInd), robot); + } + } + void performActionClick(Component comp, Robot robot) { + } + + public TestPanel(int row, int col) { + setLayout(new FlowLayout()); + Button b; + add(b = new Button("press"+ row + "" + col)); + b.setName(b.getLabel()); +// b.addMouseListener(new MouseAdapter() { +// public void mousePressed(MouseEvent e) { +// System.err.println(e); +// } +// }); + TextField t; + add(t = new TextField("text" + row + "" + col)); + t.setName(t.getText()); + + java.awt.List list = new java.awt.List(); + add(list); + list.setName("list"); + list.add("one"); + list.add("two"); + list.add("three"); + list.setMultipleMode(true); + list.setName("list" + row + "" + col); + + Checkbox check = new Checkbox("checker"); + add(check); + check.setName("check" + row + "" + col); + + Choice choice = new Choice(); + choice.add("one"); + choice.add("two"); + choice.add("three"); + add(choice); + choice.setName("choice" + row + "" + col); + + Canvas can = new Canvas() { + public Dimension getPreferredSize() { + return new Dimension(10, 10); + } + }; + can.setBackground(Color.blue); + add(can); + can.setName("canvas" + row + "" + col); + + TextArea ta = new TextArea("text\ntttt\naaaa\nwwwww\nqqqqqq\neeeeee\nrrrrrr\nyyyyyy\nuuuuu", 3, 5); + add(ta); + ta.setName("textarea" + row + "" + col); + + Scrollbar bar = new Scrollbar(Scrollbar.HORIZONTAL); + add(bar); + bar.setName("scrollbar" + row + "" + col); + + CheckboxGroup group = new CheckboxGroup(); + Checkbox ch1 = new Checkbox("one", group, true); + Checkbox ch2 = new Checkbox("two", group, false); + add(ch1); + add(ch2); + ch1.setName("checkbox1 " + row + "" + col); + ch2.setName("checkbox2 " + row + "" + col); + + + ScrollPane pane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); + add(pane); + Button bigButton = new Button("abc") { + public Dimension getPreferredSize() { + return new Dimension(100, 100); + } + }; + pane.add(bigButton); + bigButton.setName("bigbutton" + row + "" + col); + } +} + +class GlobalListener implements AWTEventListener { + java.util.List errors = new java.util.LinkedList(); + public boolean report() { + if (errors.size() != 0) { + System.err.println("Test FAILED"); + } else { + System.err.println("Test PASSED"); + return true; + } + ListIterator iter = errors.listIterator(); + while (iter.hasNext()) { + System.err.println(iter.next()); + } + return false; + } + public GlobalListener() { + } + Window getWindowParent(Component comp) { + while (comp != null && !(comp instanceof Window)) { + comp = comp.getParent(); + } + return (Window)comp; + } + void reportError(AWTEvent e, String message) { + String error = "ERROR: " + message + " : " + e; + errors.add(error); + System.err.println(error); + } + public void eventDispatched(AWTEvent e) { + Component comp = (Component)e.getSource(); + Window parent = getWindowParent(comp); + if (!(e instanceof WindowEvent || e instanceof FocusEvent)) { + System.err.println("Strange event " + e); + } + + // Skip WINDOW_OPENED + if (e.getID() == WindowEvent.WINDOW_CLOSING) { + System.err.println(e); + } + switch (e.getID()) { + case WindowEvent.WINDOW_OPENED: + case WindowEvent.WINDOW_CLOSING: + case WindowEvent.WINDOW_CLOSED: + case WindowEvent.WINDOW_ICONIFIED: + case WindowEvent.WINDOW_DEICONIFIED: + case WindowEvent.WINDOW_STATE_CHANGED: + return; + case WindowEvent.WINDOW_LOST_FOCUS: { + WindowEvent we = (WindowEvent)e; + if (we.getOppositeWindow() != null && !we.getOppositeWindow().getFocusableWindowState()) { + reportError(e, "frame lost focus because of non-focusable window"); + } + break; + } + } + // Check that Window owner is focusable + if (!parent.getFocusableWindowState()) { + reportError(e, "focus event for component in non-focusable window " + parent.getName()); + } + if (!comp.isFocusable()) { + reportError(e, "focus event for non-focusable component"); + } +// if (e instanceof WindowEvent || e instanceof FocusEvent) { +// // System.err.println(e); +// } + } +} diff --git a/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java b/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java new file mode 100644 index 00000000000..129cdc2811e --- /dev/null +++ b/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java @@ -0,0 +1,488 @@ +/* + * 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 6183877 6216005 6225560 +@summary Tests that keyboard input doesn't freeze due to type-ahead problems +@author Denis Mikhalkin: area=awt.focus +@run main/timeout=300 TestFocusFreeze +*/ + +// Note the area= after Your Name in the author tag. Here, you +// should put which functional area the test falls in. See the +// AWT-core home page -> test areas and/or -> AWT team for a list of +// areas. + + +/** + * TestFocusFreeze.java + * + * summary: XXX A brief summary of what this tests + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import java.util.concurrent.atomic.*; +import sun.awt.SunToolkit; + +public class TestFocusFreeze +{ + + //*** test-writer defined static variables go here *** + + + private static void init() + { + //*** Create instructions for the user here *** + + FocusTest.test(); + + }//End init() + + + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class TestFocusFreeze + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// if want to make listeners, here is the recommended place for them, then instantiate +// them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + TestFocusFreeze.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + TestFocusFreeze.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + System.out.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class + + +class FocusTest extends JFrame implements ActionListener { + + private JDialog pageDialog = null; + + private AtomicBoolean passed = new AtomicBoolean(); + private static volatile boolean all_passed = true; + private static volatile long pressTime; + private static Object testLock = new Object(); + private static Object resultLock = new Object(); + + public FocusTest() { + final GraphicsConfiguration gc = + GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration(); + + pageDialog = new JDialog(this, "JDialog", true, gc); + Container c = pageDialog.getContentPane(); + c.setLayout(new BorderLayout()); + JButton btnApprove =new JButton("Exit Button"); + btnApprove.addActionListener(this); + c.add("South", btnApprove); + pageDialog.pack(); + + JButton bb = new JButton("Action"); + bb.addActionListener(new ActionListener() { + final JDialog pageDialog = FocusTest.this.pageDialog; + public void actionPerformed(ActionEvent e) { + synchronized(testLock) { + testLock.notify(); + } + pageDialog.setVisible(true); + } + }); + + add(bb); + pack(); + setVisible(true); + + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + bb.requestFocus(); + + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + if (!bb.isFocusOwner()) { + System.err.println("Couldn't make bb focused"); + all_passed = false; + return; + } + + new Thread() { + public void run() { + try { + Robot r = new Robot(); + synchronized (testLock) { + testLock.wait(); + } + r.keyPress(KeyEvent.VK_SPACE); + r.delay(50); + r.keyRelease(KeyEvent.VK_SPACE); + synchronized(passed) { + passed.wait(1000); + } + pageDialog.dispose(); + FocusTest.this.dispose(); + if (!passed.get()) { + all_passed = false; + } + } catch (Exception e) { + e.printStackTrace(); + } + synchronized (resultLock) { + resultLock.notifyAll(); + } + } + }.start(); + + try { + Robot r = new Robot(); + r.keyPress(KeyEvent.VK_SPACE); + r.delay(50); + r.keyRelease(KeyEvent.VK_SPACE); + } catch (Exception e) { + e.printStackTrace(); + all_passed = false; + return; + } + + try { + synchronized (resultLock) { + resultLock.wait(); + } + } catch (InterruptedException ie) { + ie.printStackTrace(); + } + } + + public void actionPerformed(ActionEvent ae) { + System.err.println("Action performed"); + passed.set(true); + synchronized(passed) { + passed.notify(); + } + } + + public static void test() { + FocusTest test = null; + for (int i = 0; i < 10; i++) { + test = new FocusTest(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + break; + } + } + if (!all_passed) { + TestFocusFreeze.fail("Not all passed"); + } else { + TestFocusFreeze.pass(); + } + } +} diff --git a/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java b/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java new file mode 100644 index 00000000000..fd6b56d8609 --- /dev/null +++ b/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java @@ -0,0 +1,293 @@ +/* + * 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 4782886 + @summary FocusManager consumes wrong KEYTYPED-Events + @author son: area=awt.focus + @run applet WrongKeyTypedConsumedTest.html +*/ + +/** + * WrongKeyTypedConsumedTest.java + * + * summary: FocusManager consumes wrong KEYTYPED-Events + */ + +import java.applet.Applet; + +import java.awt.AWTException; +import java.awt.AWTKeyStroke; +import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.KeyboardFocusManager; +import java.awt.Point; +import java.awt.Robot; +import java.awt.TextArea; + +import java.awt.event.KeyEvent; + +import java.util.HashSet; +import java.util.Set; + +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JTextArea; + +public class WrongKeyTypedConsumedTest extends Applet +{ + //Declare things used in the test, like buttons and labels here + + public void init() + { + //Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + + String[] instructions = + { + "This is an AUTOMATIC test", + "simply wait until it is done" + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + }//End init() + + public void start () + { + //Get things going. Request focus, set size, et cetera + setSize (200,200); + setVisible(true); + validate(); + + JFrame frame = new JFrame("The Frame"); + Set ftk = new HashSet(); + ftk.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_DOWN, 0)); + frame.getContentPane(). + setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, + ftk); + + JCheckBox checkbox = new JCheckBox("test"); + frame.getContentPane().add(checkbox, BorderLayout.NORTH); + + JTextArea textarea = new JTextArea(40, 10); + frame.getContentPane().add(textarea); + + frame.pack(); + frame.setVisible(true); + + try { + Robot robot = new Robot(); + + // wait for activation + robot.delay(2000); + if (!frame.isActive()) { + Point loc = frame.getLocationOnScreen(); + Dimension size = frame.getSize(); + robot.mouseMove(loc.x + size.width/2, + loc.y + size.height/2); + frame.toFront(); + robot.delay(1000); + if (!frame.isActive()) { + throw new RuntimeException("Test Fialed: frame isn't active"); + } + } + + // verify if checkbox has focus + if (!checkbox.isFocusOwner()) { + checkbox.requestFocusInWindow(); + robot.delay(1000); + if (!checkbox.isFocusOwner()) { + throw new RuntimeException("Test Failed: checkbox doesn't have focus"); + } + } + // press VK_DOWN + robot.keyPress(KeyEvent.VK_DOWN); + robot.delay(250); + robot.keyRelease(KeyEvent.VK_DOWN); + robot.delay(1000); + + // verify if text area has focus + if (!textarea.isFocusOwner()) { + throw new RuntimeException("Test Failed: focus wasn't transfered to text area"); + } + // press '1' + robot.keyPress(KeyEvent.VK_1); + robot.delay(250); + robot.keyRelease(KeyEvent.VK_1); + robot.delay(1000); + + // verify if KEY_TYPED arraived + if (!"1".equals(textarea.getText())) { + throw new RuntimeException("Test Failed: text area text is \"" + textarea.getText() + "\", not \"1\""); + } + } catch(AWTException e) { + e.printStackTrace(); + throw new RuntimeException("Test failed because of some internal exception"); + } + Sysout.println("Test Passed"); + }// start() + +}// class WrongKeyTypedConsumedTest + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class From 75f6b17d66a720ec267404e76d181a0ff6079a1a Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Wed, 26 Mar 2008 16:56:40 +0300 Subject: [PATCH 07/46] 6609607: test/closed/java/awt/Focus/AppletInitialFocusTest should be rewritten Using test.java.awt.regtesthelpers.Util. Refactoring. Reviewed-by: volk --- .../AppletInitialFocusTest.html | 11 +-- .../AppletInitialFocusTest.java | 78 ++++--------------- .../AppletInitialFocusTest1.html | 8 +- .../AppletInitialFocusTest1.java | 27 +------ 4 files changed, 30 insertions(+), 94 deletions(-) diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html index 3d3d0c81a62..bb07d59a736 100644 --- a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.html @@ -1,11 +1,12 @@ - AppletInitialFocusTest diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java index e34e6e123a5..c3de576386e 100644 --- a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest.java @@ -23,81 +23,37 @@ /* test - @bug 4041703 4096228 4025223 4260929 - @summary Ensures that appletviewer sets a reasonable default focus - for an Applet on start + @bug 4041703 4096228 4025223 4260929 + @summary Ensures that appletviewer sets a reasonable default focus for an Applet on start @author das area=appletviewer - @run shell AppletInitialFocusTest.sh + @run applet AppletInitialFocusTest.html */ import java.applet.Applet; -import java.awt.*; -import java.awt.event.*; - -class MyKeyboardFocusManager extends DefaultKeyboardFocusManager { - public Window getGlobalFocusedWindow() { - return super.getGlobalFocusedWindow(); - } -} +import java.awt.Button; +import java.awt.Component; +import java.awt.Robot; +import java.awt.Window; +import test.java.awt.regtesthelpers.Util; public class AppletInitialFocusTest extends Applet { - - Window window; + Robot robot = Util.createRobot(); Button button = new Button("Button"); - MyKeyboardFocusManager manager = new MyKeyboardFocusManager(); - - Object lock = new Object(); public void init() { - KeyboardFocusManager.setCurrentKeyboardFocusManager(manager); - - Component parent = this; - while (parent != null && !(parent instanceof Window)) { - parent = parent.getParent(); - } - /* - * This applet is designed to be run only with appletviewer, - * so there always should be a toplevel frame. - */ - if (parent == null) { - synchronized (lock) { - System.err.println("appletviewer not running"); - System.exit(3); - } - } - window = (Window)parent; - - button.addFocusListener(new FocusAdapter() { - public void focusGained(FocusEvent e) { - synchronized (lock) { - System.err.println("passed"); - System.exit(0); - } - } - }); add(button); } public void start() { - Thread thread = new Thread(new Runnable() { - public void run() { - try { - Thread.sleep(1000); - synchronized (lock) { - Window focused = manager.getGlobalFocusedWindow(); - if (window == focused) { - System.err.println("failed"); - System.exit(2); - } else { - System.err.println("window never activated"); - System.err.println(focused); - System.exit(0); - } + new Thread(new Runnable() { + public void run() { + Util.waitTillShown(button); + robot.delay(1000); // delay the thread to let EDT to start dispatching focus events + Util.waitForIdle(robot); + if (!button.hasFocus()) { + throw new RuntimeException("Appletviewer doesn't set default focus correctly."); } - } catch(InterruptedException e) { } - } - }); - thread.start(); + }).start(); } } diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html index cdbcdb48021..dc094e1a556 100644 --- a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.html @@ -1,11 +1,13 @@ - AppletInitialFocusTest1 diff --git a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java index b72c1c99758..2f7e8f92304 100644 --- a/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java +++ b/jdk/test/java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java @@ -1,32 +1,9 @@ /* - * 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 + test %W% %E% @bug 4411534 4517274 @summary ensures that user's requestFocus() during applet initialization is not ignored. - @author prs area=appletviewer + @author prs@sparc.spb.su area=appletviewer @run shell AppletInitialFocusTest1.sh */ From 911da0a7964f43ad30be8cf022affa132bf35bc6 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Wed, 26 Mar 2008 17:38:26 +0300 Subject: [PATCH 08/46] 6616792: five AWT focus regression tests should be fixed Fixed/refactored the tests. Reviewed-by: volk --- .../ActualFocusedWindowBlockingTest.java | 228 +------ .../ActualFocusedWindowRetaining.java | 333 ++--------- .../FrameJumpingToMouse.java | 253 ++------ .../{Test.java => NoEventsTest.java} | 39 +- .../NonfocusableOwnerTest.java | 249 +------- .../awt/Focus/TypeAhead/TestFocusFreeze.java | 559 ++++-------------- .../WrongKeyTypedConsumedTest.java | 260 ++------ 7 files changed, 329 insertions(+), 1592 deletions(-) rename jdk/test/java/awt/Focus/NonFocusableWindowTest/{Test.java => NoEventsTest.java} (92%) diff --git a/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java index 823c2d0310b..888fae37f51 100644 --- a/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java +++ b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java @@ -25,8 +25,10 @@ @test @bug 6314575 @summary Tests that previosly focused owned window doesn't steal focus when an owner's component requests focus. - @author Anton Tarasov: area=awt-focus - @run applet ActualFocusedWindowBlockingTest.html + @author Anton.Tarasov: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main ActualFocusedWindowBlockingTest */ import java.awt.*; @@ -35,9 +37,10 @@ import java.applet.Applet; import java.util.concurrent.atomic.AtomicBoolean; import java.lang.reflect.InvocationTargetException; import sun.awt.SunToolkit; +import test.java.awt.regtesthelpers.Util; public class ActualFocusedWindowBlockingTest extends Applet { - Robot robot; + Robot robot = Util.createRobot(); Frame owner = new Frame("Owner Frame"); Window win = new Window(owner); Frame frame = new Frame("Auxiliary Frame"); @@ -52,28 +55,12 @@ public class ActualFocusedWindowBlockingTest extends Applet { } public void init() { - // Create instructions for the user here, as well as set up - // the environment -- set the layout manager, add buttons, - // etc. - this.setLayout (new BorderLayout ()); - Sysout.createDialogWithInstructions(new String[] - {"Automatic test. Simply wait until it's done."}); - - if ("sun.awt.motif.MToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName())) { - return; - } - Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { public void eventDispatched(AWTEvent e) { - Sysout.println("--> " + e); + System.out.println("--> " + e); } }, FocusEvent.FOCUS_EVENT_MASK | WindowEvent.WINDOW_FOCUS_EVENT_MASK); - try { - robot = new Robot(); - } catch (AWTException e) { - throw new RuntimeException("Error: unable to create robot", e); - } owner.add(fButton); win.add(wButton); frame.add(aButton); @@ -87,19 +74,18 @@ public class ActualFocusedWindowBlockingTest extends Applet { public void start() { if ("sun.awt.motif.MToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName())) { - Sysout.println("No testing on Motif. Test passed."); + System.out.println("No testing on Motif. Test passed."); return; } - Sysout.println("\nTest started:\n"); + System.out.println("\nTest started:\n"); // Test 1. clickOnCheckFocus(wButton); - clickOnCheckFocus(aButton); - clickOn(fButton); + Util.clickOnComp(fButton, robot); if (!testFocused(fButton)) { throw new TestFailedException("The owner's component [" + fButton + "] couldn't be focused by click"); } @@ -107,11 +93,10 @@ public class ActualFocusedWindowBlockingTest extends Applet { // Test 2. clickOnCheckFocus(wButton); - clickOnCheckFocus(aButton); fButton.requestFocus(); - realSync(); + Util.waitForIdle(robot); if (!testFocused(fButton)) { throw new TestFailedException("The owner's component [" + fButton + "] couldn't be focused by request"); } @@ -119,19 +104,16 @@ public class ActualFocusedWindowBlockingTest extends Applet { // Test 3. clickOnCheckFocus(wButton); - clickOnCheckFocus(aButton); - clickOnCheckFocus(fButton); - clickOnCheckFocus(aButton); - clickOn(owner); + Util.clickOnTitle(owner, robot); if (!testFocused(fButton)) { throw new TestFailedException("The owner's component [" + fButton + "] couldn't be focused as the most recent focus owner"); } - Sysout.println("Test passed."); + System.out.println("Test passed."); } void tuneAndShowWindows(Window[] arr) { @@ -142,33 +124,18 @@ public class ActualFocusedWindowBlockingTest extends Applet { w.setBackground(Color.blue); w.setVisible(true); y += 200; - realSync(); + Util.waitForIdle(robot); } } - void clickOn(Component c) { - Sysout.println("Test: clicking " + c); - - Point p = c.getLocationOnScreen(); - Dimension d = c.getSize(); - - if (c instanceof Frame) { - robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2); - Sysout.println((p.x + (int)(d.getWidth()/2)) + " " + (p.y + ((Frame)c).getInsets().top/2)); - } else { - robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); - } - robot.mousePress(InputEvent.BUTTON1_MASK); - robot.delay(100); - robot.mouseRelease(InputEvent.BUTTON1_MASK); - - realSync(); - } - void clickOnCheckFocus(Component c) { - clickOn(c); + if (c instanceof Frame) { + Util.clickOnTitle((Frame)c, robot); + } else { + Util.clickOnComp(c, robot); + } if (!testFocused(c)) { - throw new RuntimeException("Error: [" + c + "] couldn't get focus by click."); + throw new TestErrorException(c + "couldn't get focus by click."); } } @@ -177,157 +144,22 @@ public class ActualFocusedWindowBlockingTest extends Applet { if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == c) { return true; } - realSync(); + Util.waitForIdle(robot); } return false; } - void realSync() { - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + // Thrown when the behavior being verified is found wrong. + class TestFailedException extends RuntimeException { + TestFailedException(String msg) { + super("Test failed: " + msg); + } } - class TestFailedException extends RuntimeException { - public TestFailedException(String cause) { - super("Test failed. " + cause); - Sysout.println(cause); + // Thrown when an error not related to the behavior being verified is encountered. + class TestErrorException extends RuntimeException { + TestErrorException(String msg) { + super("Unexpected error: " + msg); } } } - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout -{ - static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setLocation(500,0); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - dialog.displayMessage( messageIn ); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - setVisible(true); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class diff --git a/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java index e539e39cd70..f657d431eac 100644 --- a/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java +++ b/jdk/test/java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java @@ -23,16 +23,19 @@ /* @test - @bug 4823903 - @summary Tests actual focused window retaining. - @author Anton Tarasov: area=awt.focus - @run applet ActualFocusedWindowRetaining.html + @bug 4823903 + @summary Tests actual focused window retaining. + @author Anton.Tarasov: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main ActualFocusedWindowRetaining */ import java.awt.*; import java.awt.event.*; import java.lang.reflect.*; import java.applet.*; +import test.java.awt.regtesthelpers.Util; public class ActualFocusedWindowRetaining extends Applet { public static Frame frame = new Frame("Other Frame"); @@ -46,7 +49,7 @@ public class ActualFocusedWindowRetaining extends Applet { public static Window window1 = new TestWindow(owner, otherButton2, testButton2, 800, 200); public static Window window2 = new TestWindow(owner, otherButton3, testButton3, 800, 300); public static int step; - public static Robot robot; + public static Robot robot = Util.createRobot(); public static void main(String[] args) { ActualFocusedWindowRetaining a = new ActualFocusedWindowRetaining(); @@ -54,53 +57,25 @@ public class ActualFocusedWindowRetaining extends Applet { a.start(); } - public void init() - { - //Create instructions for the user here, as well as set up - // the environment -- set the layout manager, add buttons, - // etc. - this.setLayout (new BorderLayout ()); - - String[] instructions = - { - "This is an AUTOMATIC test", - "simply wait until it is done" - }; - Sysout.createDialogWithInstructions( instructions ); - } - - public void start () - { - if (Toolkit.getDefaultToolkit().getClass() - .getName().equals("sun.awt.motif.MToolkit")) { - Sysout.println("No testing on Motif."); - return; - } - - try { - robot = new Robot(); - } catch (AWTException e) { - throw new RuntimeException("Error: unable to create robot", e); - } - + public void start () { Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { public void eventDispatched(AWTEvent e) { Object src = e.getSource(); Class cls = src.getClass(); if (cls == TestWindow.class) { - Sysout.println(e.paramString() + " on <" + (src == window1 ? "Window 1" : "Window 2") + ">"); + System.out.println(e.paramString() + " on <" + (src == window1 ? "Window 1" : "Window 2") + ">"); } else if (cls == Frame.class) { - Sysout.println(e.paramString() + " on <" + ((Frame)src).getTitle() + ">"); + System.out.println(e.paramString() + " on <" + ((Frame)src).getTitle() + ">"); } else if (cls == Button.class) { - Sysout.println(e.paramString() + " on <" + ((Button)src).getLabel() + ">"); + System.out.println(e.paramString() + " on <" + ((Button)src).getLabel() + ">"); } else { - Sysout.println(e.paramString() + " on "); + System.out.println(e.paramString() + " on "); } } }, AWTEvent.WINDOW_EVENT_MASK | AWTEvent.WINDOW_FOCUS_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK); - setSize (200,200); + setSize (500, 200); setVisible(true); validate(); @@ -117,15 +92,15 @@ public class ActualFocusedWindowRetaining extends Applet { owner.setSize(new Dimension(400, 100)); owner.setVisible(true); owner.toFront(); - waitTillShown(owner); + Util.waitTillShown(owner); window1.setVisible(true); window2.setVisible(true); window1.toFront(); window2.toFront(); // Wait longer... - waitTillShown(window1); - waitTillShown(window2); + Util.waitTillShown(window1); + Util.waitTillShown(window2); test(); @@ -134,85 +109,39 @@ public class ActualFocusedWindowRetaining extends Applet { } public void test() { - Button[] butArr = new Button[] {testButton3, testButton2, testButton1}; Window[] winArr = new Window[] {window2, window1, owner}; step = 1; for (int i = 0; i < 3; i++) { - clickOnCheckFocusOwner(butArr[i]); - clickOnCheckFocusedWindow(frame); - clickOn(owner); - if (!checkFocusedWindow(winArr[i])) { - stopTest("Test failed: actual focused window didn't get a focus"); - } - if (!checkFocusOwner(butArr[i])) { - stopTest("Test failed: actual focus owner didn't get a focus"); - } + clickInSeriesCheckFocus(null, butArr[i], frame); + clickOwnerCheckFocus(winArr[i], butArr[i]); step++; } step = 4; - clickOnCheckFocusOwner(testButton3); - clickOnCheckFocusOwner(testButton1); - clickOnCheckFocusedWindow(frame); - clickOn(owner); - if (!checkFocusedWindow(owner)) { - stopTest("Test failed: actual focused window didn't get a focus"); - } - if (!checkFocusOwner(testButton1)) { - stopTest("Test failed: actual focus owner didn't get a focus"); - } + clickInSeriesCheckFocus(testButton3, testButton1, frame); + clickOwnerCheckFocus(owner, testButton1); step = 5; - clickOnCheckFocusOwner(testButton3); - clickOnCheckFocusOwner(testButton2); - clickOnCheckFocusedWindow(frame); - clickOn(owner); - if (!checkFocusedWindow(window1)) { - stopTest("Test failed: actual focused window didn't get a focus"); - } - if (!checkFocusOwner(testButton2)) { - stopTest("Test failed: actual focus owner didn't get a focus"); - } + clickInSeriesCheckFocus(testButton3, testButton2, frame); + clickOwnerCheckFocus(window1, testButton2); step = 6; - clickOnCheckFocusOwner(testButton1); - clickOnCheckFocusOwner(testButton2); - clickOnCheckFocusedWindow(frame); - clickOn(owner); - if (!checkFocusedWindow(window1)) { - stopTest("Test failed: actual focused window didn't get a focus"); - } - if (!checkFocusOwner(testButton2)) { - stopTest("Test failed: actual focus owner didn't get a focus"); - } + clickInSeriesCheckFocus(testButton1, testButton2, frame); + clickOwnerCheckFocus(window1, testButton2); step = 7; - clickOnCheckFocusOwner(testButton1); - clickOnCheckFocusOwner(testButton2); - clickOnCheckFocusedWindow(frame); + clickInSeriesCheckFocus(testButton1, testButton2, frame); window1.setVisible(false); - clickOn(owner); - if (!checkFocusedWindow(owner)) { - stopTest("Test failed: actual focused window didn't get a focus"); - } - if (!checkFocusOwner(testButton1)) { - stopTest("Test failed: actual focus owner didn't get a focus"); - } + Util.waitForIdle(robot); + clickOwnerCheckFocus(owner, testButton1); step = 8; window1.setVisible(true); - waitTillShown(window1); - clickOnCheckFocusOwner(testButton2); - clickOnCheckFocusedWindow(frame); - clickOn(owner); - if (!checkFocusedWindow(window1)) { - stopTest("Test failed: actual focused window didn't get a focus"); - } - if (!checkFocusOwner(testButton2)) { - stopTest("Test failed: actual focus owner didn't get a focus"); - } + Util.waitTillShown(window1); + clickInSeriesCheckFocus(null, testButton2, frame); + clickOwnerCheckFocus(window1, testButton2); } boolean checkFocusOwner(Component comp) { @@ -223,56 +152,46 @@ public class ActualFocusedWindowRetaining extends Applet { return (win == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()); } - void waitTillShown(Component c) { - ((sun.awt.SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + void clickOwnerCheckFocus(Window focusedWindow, Component focusedComp) { + Util.clickOnTitle(owner, robot); + robot.delay(500); + + if (!checkFocusedWindow(focusedWindow)) { + stopTest("Test failed: actual focused window didn't get a focus"); + } + if (!checkFocusOwner(focusedComp)) { + stopTest("Test failed: actual focus owner didn't get a focus"); + } + } + + void clickInSeriesCheckFocus(Component comp1, Component comp2, Frame frame) { + if (comp1 != null) { + clickOnCheckFocusOwner(comp1); + } + if (comp2 != null) { + clickOnCheckFocusOwner(comp2); + } + clickOnCheckFocusedWindow(frame); } void clickOnCheckFocusOwner(Component c) { - clickOn(c); + Util.clickOnComp(c, robot); + robot.delay(500); + if (!checkFocusOwner(c)) { stopTest("Error: can't bring a focus on Component by clicking on it"); } } void clickOnCheckFocusedWindow(Frame f) { - clickOn(f); + Util.clickOnTitle(f, robot); + robot.delay(500); + if (!checkFocusedWindow(f)) { stopTest("Error: can't bring a focus on Frame by clicking on it"); } } - void clickOn(Component c) - { - Point p = c.getLocationOnScreen(); - Dimension d = c.getSize(); - - if (c instanceof Frame) { - robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2); - } else { - robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); - } - - pause(100); - robot.mousePress(InputEvent.BUTTON1_MASK); - pause(100); - robot.mouseRelease(InputEvent.BUTTON1_MASK); - - waitForIdle(); - } - - void waitForIdle() { - ((sun.awt.SunToolkit) Toolkit.getDefaultToolkit()).realSync(); - } - - void pause(int msec) { - try { - Thread.sleep(msec); - } catch (InterruptedException e) { - Sysout.println("pause: non-fatal exception caught:"); - e.printStackTrace(); - } - } - void stopTest(String msg) { throw new RuntimeException(new String("Step " + step + ": " + msg)); } @@ -290,141 +209,3 @@ class TestWindow extends Window { setBackground(Color.green); } } - - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout -{ - private static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - dialog.displayMessage( messageIn ); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - setVisible(true); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class diff --git a/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java b/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java index 54928d2988b..510a65cfa7e 100644 --- a/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java +++ b/jdk/test/java/awt/Focus/FrameJumpingToMouse/FrameJumpingToMouse.java @@ -22,238 +22,65 @@ */ /* -test -@bug 4752312 -@summary Tests that after moving non-focusable window it ungrabs mouse pointer -@author dom@sparc.spb.su: area=awt.focus -@run applet FrameJumpingToMouse.html + @test + @bug 4752312 + @summary Tests that after moving non-focusable window it ungrabs mouse pointer + @author Denis Mikhalkin: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main FrameJumpingToMouse */ -// Note there is no @ in front of test above. This is so that the -// harness will not mistake this file as a test file. It should -// only see the html file as a test file. (the harness runs all -// valid test files, so it would run this test twice if this file -// were valid as well as the html file.) -// Also, note the area= after Your Name in the author tag. Here, you -// should put which functional area the test falls in. See the -// AWT-core home page -> test areas and/or -> AWT team for a list of -// areas. -// Note also the 'FrameJumpingToMouse.html' in the run tag. This should -// be changed to the name of the test. - - -/** - * FrameJumpingToMouse.java - * - * summary: - */ - import java.applet.Applet; -import java.awt.*; -import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.Point; +import java.awt.Robot; +import java.awt.TextArea; +import java.awt.Toolkit; +import java.awt.event.InputEvent; import javax.swing.JFrame; - -//Automated tests should run as applet tests if possible because they -// get their environments cleaned up, including AWT threads, any -// test created threads, and any system resources used by the test -// such as file descriptors. (This is normally not a problem as -// main tests usually run in a separate VM, however on some platforms -// such as the Mac, separate VMs are not possible and non-applet -// tests will cause problems). Also, you don't have to worry about -// synchronisation stuff in Applet tests they way you do in main -// tests... - +import test.java.awt.regtesthelpers.Util; public class FrameJumpingToMouse extends Applet { - //Declare things used in the test, like buttons and labels here JFrame frame = new JFrame("Test jumping frame"); - Robot robot = null; - public void init() - { - //Create instructions for the user here, as well as set up - // the environment -- set the layout manager, add buttons, - // etc. + Robot robot = Util.createRobot(); - this.setLayout (new BorderLayout ()); + public static void main(String[] args) { + FrameJumpingToMouse test = new FrameJumpingToMouse(); + test.init(); + test.start(); + } + public void init() { frame.setFocusableWindowState(false); frame.setBounds(100, 100, 100, 100); - }//End init() - - public void start () - { - //Get things going. Request focus, set size, et cetera - setSize (200,200); - setVisible(true); - validate(); - - try { - robot = new Robot(); - } catch (Exception e) { - throw new RuntimeException("Can't create robot"); - } + } + public void start() { frame.setVisible(true); + Util.waitTillShown(frame); - robot.delay(1000); - - Point frameLoc = frame.getLocationOnScreen(); - robot.mouseMove(frameLoc.x+frame.getWidth()/4, frameLoc.y+frame.getInsets().top/2); + Point loc = frame.getLocationOnScreen(); + robot.mouseMove(loc.x + frame.getWidth() / 4, loc.y + frame.getInsets().top / 2); + robot.delay(50); robot.mousePress(InputEvent.BUTTON1_MASK); - robot.mouseMove(frameLoc.x+100, frameLoc.y+50); + robot.delay(50); + robot.mouseMove(loc.x + 100, loc.y + 50); + robot.delay(50); robot.mouseRelease(InputEvent.BUTTON1_MASK); - Toolkit.getDefaultToolkit().sync(); - robot.waitForIdle(); - frameLoc = frame.getLocation(); + Util.waitForIdle(robot); - robot.mouseMove(frameLoc.x+frame.getWidth()/2, frameLoc.y+frame.getHeight()/2); + loc = frame.getLocation(); + robot.mouseMove(loc.x + frame.getWidth() / 2, loc.y + frame.getHeight() / 2); + Util.waitForIdle(robot); - Toolkit.getDefaultToolkit().sync(); - robot.waitForIdle(); - - if (!(frame.getLocation().equals(frameLoc))) { - throw new RuntimeException("Frame is moving to mouse with grab"); + if (!(frame.getLocation().equals(loc))) { + throw new RuntimeException("Test failed: frame is moving to mouse with grab!"); } - }// start() - -}// class FrameJumpingToMouse - - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout -{ - private static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); + System.out.println("Test passed."); } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - dialog.displayMessage( messageIn ); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - show(); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class +} diff --git a/jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java b/jdk/test/java/awt/Focus/NonFocusableWindowTest/NoEventsTest.java similarity index 92% rename from jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java rename to jdk/test/java/awt/Focus/NonFocusableWindowTest/NoEventsTest.java index e3e7d0645a8..4375385e5b6 100644 --- a/jdk/test/java/awt/Focus/NonFocusableWindowTest/Test.java +++ b/jdk/test/java/awt/Focus/NonFocusableWindowTest/NoEventsTest.java @@ -20,19 +20,20 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ + /* @test @bug 4452384 @summary Tests that non-focusable windows doesn't generate any focus events when accessed. - @author dom: area=awt.focus - @run main Test + @author Denis.Mikhalkin: area=awt.focus + @run main NoEventsTest */ import java.awt.*; import java.awt.event.*; import java.util.*; -public class Test extends Frame { +public class NoEventsTest extends Frame { public static final int DEF_WIDTH = 400, DEF_HEIGHT = 300, DEF_TOP = 1, @@ -80,8 +81,8 @@ public class Test extends Frame { windows = new Window[7]; windows[0] = new TestWindow(0, 0, false, main_frame); //windows[1] = new TestWindow(2, 1, true, main_frame); - windows[2] = new Test(1, 0, false, true); - windows[3] = new Test(2, 0, false, false); + windows[2] = new NoEventsTest(1, 0, false, true); + windows[3] = new NoEventsTest(2, 0, false, false); //windows[4] = new Test(3, 0, true, true); windows[5] = new TestDialog(0, 1, false, true, main_frame); windows[6] = new TestDialog(1, 1, false, false, main_frame); @@ -174,12 +175,12 @@ public class Test extends Frame { } } } - public Test(int row, int col, boolean focusable, boolean resizable) { + public NoEventsTest(int row, int col, boolean focusable, boolean resizable) { super("Frame" + row + "" + col); TestPanel panel = new TestPanel(row, col); - if (Test.automatic) { - row = Test.DEF_ROW; - col = Test.DEF_COL; + if (NoEventsTest.automatic) { + row = NoEventsTest.DEF_ROW; + col = NoEventsTest.DEF_COL; } setName(getTitle()); add("Center", panel); @@ -187,7 +188,7 @@ public class Test extends Frame { ", " + (resizable?"resizable":"non-resizable")); l.setBackground(Color.green); add("North", l); - setBounds(Test.DEF_LEFT + DEF_WIDTH*col, DEF_TOP + DEF_HEIGHT*row, DEF_WIDTH, DEF_HEIGHT); + setBounds(NoEventsTest.DEF_LEFT + DEF_WIDTH*col, DEF_TOP + DEF_HEIGHT*row, DEF_WIDTH, DEF_HEIGHT); if (!focusable) { setFocusableWindowState(false); } @@ -202,9 +203,9 @@ class TestWindow extends Window { super(owner); setName("Window" + row + "" + col); TestPanel panel = new TestPanel(row, col); - if (Test.automatic) { - row = Test.DEF_ROW; - col = Test.DEF_COL; + if (NoEventsTest.automatic) { + row = NoEventsTest.DEF_ROW; + col = NoEventsTest.DEF_COL; } add("Center", panel); @@ -213,7 +214,7 @@ class TestWindow extends Window { l.setBackground(Color.green); add("North", l); - setBounds(Test.DEF_LEFT + Test.DEF_WIDTH*col, Test.DEF_TOP + Test.DEF_HEIGHT*row, Test.DEF_WIDTH, Test.DEF_HEIGHT); + setBounds(NoEventsTest.DEF_LEFT + NoEventsTest.DEF_WIDTH*col, NoEventsTest.DEF_TOP + NoEventsTest.DEF_HEIGHT*row, NoEventsTest.DEF_WIDTH, NoEventsTest.DEF_HEIGHT); if (!focusable) { setFocusableWindowState(false); } @@ -225,9 +226,9 @@ class TestDialog extends Dialog { super(owner); setName("Dialog" + row + "" + col); TestPanel panel = new TestPanel(row, col); - if (Test.automatic) { - row = Test.DEF_ROW; - col = Test.DEF_COL; + if (NoEventsTest.automatic) { + row = NoEventsTest.DEF_ROW; + col = NoEventsTest.DEF_COL; } add("Center", panel); @@ -236,7 +237,7 @@ class TestDialog extends Dialog { l.setBackground(Color.green); add("North", l); - setBounds(Test.DEF_LEFT + Test.DEF_WIDTH*col, Test.DEF_TOP + Test.DEF_HEIGHT*row, Test.DEF_WIDTH, Test.DEF_HEIGHT); + setBounds(NoEventsTest.DEF_LEFT + NoEventsTest.DEF_WIDTH*col, NoEventsTest.DEF_TOP + NoEventsTest.DEF_HEIGHT*row, NoEventsTest.DEF_WIDTH, NoEventsTest.DEF_HEIGHT); if (!focusable) { setFocusableWindowState(false); } @@ -415,3 +416,5 @@ class GlobalListener implements AWTEventListener { // } } } + + diff --git a/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java b/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java index 087eba9dea5..74c124b294b 100644 --- a/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java +++ b/jdk/test/java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java @@ -25,8 +25,10 @@ @test @bug 6182359 @summary Tests that Window having non-focusable owner can't be a focus owner. - @author Anton Tarasov: area=awt.focus - @run applet NonfocusableOwnerTest.html + @author Anton.Tarasov: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main NonfocusableOwnerTest */ import java.awt.*; @@ -34,319 +36,124 @@ import java.awt.event.*; import java.applet.Applet; import java.lang.reflect.*; import java.io.*; +import test.java.awt.regtesthelpers.Util; public class NonfocusableOwnerTest extends Applet { - Robot robot; + Robot robot = Util.createRobot(); Frame frame; Dialog dialog; Window window1; Window window2; Button button = new Button("button"); -// PrintStream Sysout = System.out; public static void main(String[] args) { NonfocusableOwnerTest test = new NonfocusableOwnerTest(); - test.init(); test.start(); } - public void init() { - try { - robot = new Robot(); - } catch (AWTException e) { - throw new RuntimeException("Error: unable to create robot", e); - } - // Create instructions for the user here, as well as set up - // the environment -- set the layout manager, add buttons, - // etc. - this.setLayout (new BorderLayout ()); - } - public void start() { Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { public void eventDispatched(AWTEvent e) { - Sysout.println(e.toString()); + System.out.println(e.toString()); } }, FocusEvent.FOCUS_EVENT_MASK | WindowEvent.WINDOW_FOCUS_EVENT_MASK | WindowEvent.WINDOW_EVENT_MASK); frame = new Frame("Frame"); frame.setName("Frame-owner"); + frame.setBounds(100, 0, 100, 100); dialog = new Dialog(frame, "Dialog"); dialog.setName("Dialog-owner"); + dialog.setBounds(100, 0, 100, 100); window1 = new Window(frame); window1.setName("1st child"); + window1.setBounds(100, 300, 100, 100); window2 = new Window(window1); window2.setName("2nd child"); + window2.setBounds(100, 500, 100, 100); test1(frame, window1); test2(frame, window1, window2); test3(frame, window1, window2); window1 = new Window(dialog); + window1.setBounds(100, 300, 100, 100); window1.setName("1st child"); window2 = new Window(window1); window2.setName("2nd child"); + window2.setBounds(100, 500, 100, 100); test1(dialog, window1); test2(dialog, window1, window2); test3(dialog, window1, window2); - Sysout.println("Test passed."); + System.out.println("Test passed."); } void test1(Window owner, Window child) { - Sysout.println("* * * STAGE 1 * * *\nowner=" + owner); + System.out.println("* * * STAGE 1 * * *\nWindow owner: " + owner); owner.setFocusableWindowState(false); - owner.setSize(100, 100); owner.setVisible(true); child.add(button); - child.setBounds(0, 300, 100, 100); child.setVisible(true); - waitTillShown(child); + Util.waitTillShown(child); - clickOn(button); + Util.clickOnComp(button, robot); if (button == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()) { throw new RuntimeException("Test Failed."); } - owner.dispose(); child.dispose(); + owner.dispose(); } void test2(Window owner, Window child1, Window child2) { - Sysout.println("* * * STAGE 2 * * *\nowner=" + owner); + System.out.println("* * * STAGE 2 * * *\nWindow nowner: " + owner); owner.setFocusableWindowState(false); - owner.setSize(100, 100); owner.setVisible(true); child1.setFocusableWindowState(true); - child1.setBounds(0, 300, 100, 100); child1.setVisible(true); child2.add(button); - child2.setBounds(0, 500, 100, 100); child2.setVisible(true); - clickOn(button); + Util.waitTillShown(child2); + + Util.clickOnComp(button, robot); if (button == KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()) { throw new RuntimeException("Test failed."); } - owner.dispose(); - child1.dispose(); child2.dispose(); + child1.dispose(); + owner.dispose(); } void test3(Window owner, Window child1, Window child2) { - Sysout.println("* * * STAGE 3 * * *\nowner=" + owner); + System.out.println("* * * STAGE 3 * * *\nWidow owner: " + owner); owner.setFocusableWindowState(true); - owner.setSize(100, 100); owner.setVisible(true); child1.setFocusableWindowState(false); - child1.setBounds(0, 300, 100, 100); child1.setVisible(true); child2.setFocusableWindowState(true); child2.add(button); - child2.setBounds(0, 500, 100, 100); child2.setVisible(true); - clickOn(button); + Util.waitTillShown(child2); + Util.clickOnComp(button, robot); System.err.println("focus owner: " + KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()); if (button != KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()) { throw new RuntimeException("Test failed."); } - owner.dispose(); child1.dispose(); child2.dispose(); - } - - void clickOn(Component c) { - Point p = c.getLocationOnScreen(); - Dimension d = c.getSize(); - - Sysout.println("Clicking " + c); - - if (c instanceof Frame) { - robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2); - } else { - robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); - } - robot.mousePress(InputEvent.BUTTON1_MASK); - robot.mouseRelease(InputEvent.BUTTON1_MASK); - waitForIdle(); - } - - void waitTillShown(Component c) { - while (true) { - try { - Thread.sleep(100); - c.getLocationOnScreen(); - break; - } catch (InterruptedException e) { - throw new RuntimeException(e); - } catch (IllegalComponentStateException e) {} - } - } - void waitForIdle() { - try { - Toolkit.getDefaultToolkit().sync(); - sun.awt.SunToolkit.flushPendingEvents(); - EventQueue.invokeAndWait( new Runnable() { - public void run() {} // Dummy implementation - }); - } catch(InterruptedException ie) { - Sysout.println("waitForIdle, non-fatal exception caught:"); - ie.printStackTrace(); - } catch(InvocationTargetException ite) { - Sysout.println("waitForIdle, non-fatal exception caught:"); - ite.printStackTrace(); - } - - // wait longer... - robot.delay(200); + owner.dispose(); } } - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout -{ - static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - System.err.println(messageIn); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - setVisible(true); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class diff --git a/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java b/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java index 129cdc2811e..69f78e3640d 100644 --- a/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java +++ b/jdk/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java @@ -22,467 +22,118 @@ */ /* -@test -@bug 6183877 6216005 6225560 -@summary Tests that keyboard input doesn't freeze due to type-ahead problems -@author Denis Mikhalkin: area=awt.focus -@run main/timeout=300 TestFocusFreeze + @test + @bug 6183877 6216005 6225560 + @library ../../regtesthelpers + @build Util + @summary Tests that keyboard input doesn't freeze due to type-ahead problems + @author Denis.Mikhalkin, Anton.Tarasov: area=awt.focus + @run main TestFocusFreeze */ -// Note the area= after Your Name in the author tag. Here, you -// should put which functional area the test falls in. See the -// AWT-core home page -> test areas and/or -> AWT team for a list of -// areas. +import java.awt.Component; +import java.awt.DefaultKeyboardFocusManager; +import java.awt.KeyboardFocusManager; +import java.awt.Robot; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.util.concurrent.atomic.AtomicBoolean; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import test.java.awt.regtesthelpers.Util; + +public class TestFocusFreeze { + private static JFrame frame; + private static JDialog dialog; + private static JButton dlgButton; + private static JButton frameButton; + private static AtomicBoolean lock = new AtomicBoolean(false); + private static Robot robot = Util.createRobot(); + + public static void main(String[] args) { + boolean all_passed = true; + KeyboardFocusManager testKFM = new TestKFM(robot); + KeyboardFocusManager defKFM = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - -/** - * TestFocusFreeze.java - * - * summary: XXX A brief summary of what this tests - */ - -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import java.util.concurrent.atomic.*; -import sun.awt.SunToolkit; - -public class TestFocusFreeze -{ - - //*** test-writer defined static variables go here *** - - - private static void init() - { - //*** Create instructions for the user here *** - - FocusTest.test(); - - }//End init() - - - - /***************************************************** - * Standard Test Machinery Section - * DO NOT modify anything in this section -- it's a - * standard chunk of code which has all of the - * synchronisation necessary for the test harness. - * By keeping it the same in all tests, it is easier - * to read and understand someone else's test, as - * well as insuring that all tests behave correctly - * with the test harness. - * There is a section following this for test- - * classes - ******************************************************/ - private static boolean theTestPassed = false; - private static boolean testGeneratedInterrupt = false; - private static String failureMessage = ""; - - private static Thread mainThread = null; - - private static int sleepTime = 300000; - - // Not sure about what happens if multiple of this test are - // instantiated in the same VM. Being static (and using - // static vars), it aint gonna work. Not worrying about - // it for now. - public static void main( String args[] ) throws InterruptedException - { - mainThread = Thread.currentThread(); - try - { - init(); - } - catch( TestPassedException e ) - { - //The test passed, so just return from main and harness will - // interepret this return as a pass - return; - } - //At this point, neither test pass nor test fail has been - // called -- either would have thrown an exception and ended the - // test, so we know we have multiple threads. - - //Test involves other threads, so sleep and wait for them to - // called pass() or fail() - try - { - Thread.sleep( sleepTime ); - //Timed out, so fail the test - throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); - } - catch (InterruptedException e) - { - //The test harness may have interrupted the test. If so, rethrow the exception - // so that the harness gets it and deals with it. - if( ! testGeneratedInterrupt ) throw e; - - //reset flag in case hit this code more than once for some reason (just safety) - testGeneratedInterrupt = false; - - if ( theTestPassed == false ) - { - throw new RuntimeException( failureMessage ); - } - } - - }//main - - public static synchronized void setTimeoutTo( int seconds ) - { - sleepTime = seconds * 1000; - } - - public static synchronized void pass() - { - Sysout.println( "The test passed." ); - Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); - //first check if this is executing in main thread - if ( mainThread == Thread.currentThread() ) - { - //Still in the main thread, so set the flag just for kicks, - // and throw a test passed exception which will be caught - // and end the test. - theTestPassed = true; - throw new TestPassedException(); - } - theTestPassed = true; - testGeneratedInterrupt = true; - mainThread.interrupt(); - }//pass() - - public static synchronized void fail() - { - //test writer didn't specify why test failed, so give generic - fail( "it just plain failed! :-)" ); - } - - public static synchronized void fail( String whyFailed ) - { - Sysout.println( "The test failed: " + whyFailed ); - Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); - //check if this called from main thread - if ( mainThread == Thread.currentThread() ) - { - //If main thread, fail now 'cause not sleeping - throw new RuntimeException( whyFailed ); - } - theTestPassed = false; - testGeneratedInterrupt = true; - failureMessage = whyFailed; - mainThread.interrupt(); - }//fail() - -}// class TestFocusFreeze - -//This exception is used to exit from any level of call nesting -// when it's determined that the test has passed, and immediately -// end the test. -class TestPassedException extends RuntimeException -{ -} - -//*********** End Standard Test Machinery Section ********** - - -//************ Begin classes defined for the test **************** - -// if want to make listeners, here is the recommended place for them, then instantiate -// them in init() - -/* Example of a class which may be written as part of a test -class NewClass implements anInterface - { - static int newVar = 0; - - public void eventDispatched(AWTEvent e) - { - //Counting events to see if we get enough - eventCount++; - - if( eventCount == 20 ) - { - //got enough events, so pass - - TestFocusFreeze.pass(); - } - else if( tries == 20 ) - { - //tried too many times without getting enough events so fail - - TestFocusFreeze.fail(); - } - - }// eventDispatched() - - }// NewClass class - -*/ - - -//************** End classes defined for the test ******************* - - - - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout -{ - private static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - System.out.println(messageIn); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - setVisible(true); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class - - -class FocusTest extends JFrame implements ActionListener { - - private JDialog pageDialog = null; - - private AtomicBoolean passed = new AtomicBoolean(); - private static volatile boolean all_passed = true; - private static volatile long pressTime; - private static Object testLock = new Object(); - private static Object resultLock = new Object(); - - public FocusTest() { - final GraphicsConfiguration gc = - GraphicsEnvironment.getLocalGraphicsEnvironment(). - getDefaultScreenDevice().getDefaultConfiguration(); - - pageDialog = new JDialog(this, "JDialog", true, gc); - Container c = pageDialog.getContentPane(); - c.setLayout(new BorderLayout()); - JButton btnApprove =new JButton("Exit Button"); - btnApprove.addActionListener(this); - c.add("South", btnApprove); - pageDialog.pack(); - - JButton bb = new JButton("Action"); - bb.addActionListener(new ActionListener() { - final JDialog pageDialog = FocusTest.this.pageDialog; - public void actionPerformed(ActionEvent e) { - synchronized(testLock) { - testLock.notify(); - } - pageDialog.setVisible(true); - } - }); - - add(bb); - pack(); - setVisible(true); - - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); - - bb.requestFocus(); - - ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); - - if (!bb.isFocusOwner()) { - System.err.println("Couldn't make bb focused"); - all_passed = false; - return; - } - - new Thread() { - public void run() { - try { - Robot r = new Robot(); - synchronized (testLock) { - testLock.wait(); - } - r.keyPress(KeyEvent.VK_SPACE); - r.delay(50); - r.keyRelease(KeyEvent.VK_SPACE); - synchronized(passed) { - passed.wait(1000); - } - pageDialog.dispose(); - FocusTest.this.dispose(); - if (!passed.get()) { - all_passed = false; - } - } catch (Exception e) { - e.printStackTrace(); - } - synchronized (resultLock) { - resultLock.notifyAll(); - } - } - }.start(); - - try { - Robot r = new Robot(); - r.keyPress(KeyEvent.VK_SPACE); - r.delay(50); - r.keyRelease(KeyEvent.VK_SPACE); - } catch (Exception e) { - e.printStackTrace(); - all_passed = false; - return; - } - - try { - synchronized (resultLock) { - resultLock.wait(); - } - } catch (InterruptedException ie) { - ie.printStackTrace(); - } - } - - public void actionPerformed(ActionEvent ae) { - System.err.println("Action performed"); - passed.set(true); - synchronized(passed) { - passed.notify(); - } - } - - public static void test() { - FocusTest test = null; for (int i = 0; i < 10; i++) { - test = new FocusTest(); - try { - Thread.sleep(500); - } catch (InterruptedException e) { - break; + test(testKFM, defKFM); + Util.waitForIdle(robot); + System.out.println("Iter " + i + ": " + (lock.get() ? "passed." : "failed!")); + if (!lock.get()) { + all_passed = false; } } if (!all_passed) { - TestFocusFreeze.fail("Not all passed"); - } else { - TestFocusFreeze.pass(); + throw new RuntimeException("Test failed: not all iterations passed!"); } + System.out.println("Test passed."); + } + + public static void test(final KeyboardFocusManager testKFM, final KeyboardFocusManager defKFM) { + frame = new JFrame("Frame"); + dialog = new JDialog(frame, "Dialog", true); + dlgButton = new JButton("Dialog_Button"); + frameButton = new JButton("Frame_Button"); + + lock.set(false); + + dialog.add(dlgButton); + dialog.setLocation(200, 0); + dialog.pack(); + frame.add(frameButton); + frame.pack(); + + dlgButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dialog.dispose(); + frame.dispose(); + synchronized (lock) { + lock.set(true); + lock.notifyAll(); + } + } + }); + + frameButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // Right before the dialog will be shown, there will be called + // enqueuKeyEvents() method. We are to catch it. + KeyboardFocusManager.setCurrentKeyboardFocusManager(testKFM); + dialog.setVisible(true); + KeyboardFocusManager.setCurrentKeyboardFocusManager(defKFM); + } + }); + + Runnable showAction = new Runnable() { + public void run() { + frame.setVisible(true); + } + }; + if (!Util.trackFocusGained(frameButton, showAction, 2000, false)) { + System.out.println("Test error: wrong initial focus!"); + return; + } + + robot.keyPress(KeyEvent.VK_SPACE); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_SPACE); + + Util.waitForCondition(lock, 2000); + Util.waitForIdle(robot); + } +} + +class TestKFM extends DefaultKeyboardFocusManager { + Robot robot; + public TestKFM(Robot robot) { + this.robot = robot; + } + protected synchronized void enqueueKeyEvents(long after, Component untilFocused) { + super.enqueueKeyEvents(after, untilFocused); + robot.keyPress(KeyEvent.VK_SPACE); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_SPACE); } } diff --git a/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java b/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java index fd6b56d8609..14fd0807b82 100644 --- a/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java +++ b/jdk/test/java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java @@ -22,21 +22,16 @@ */ /* - test - @bug 4782886 - @summary FocusManager consumes wrong KEYTYPED-Events - @author son: area=awt.focus - @run applet WrongKeyTypedConsumedTest.html + @test + @bug 4782886 + @summary FocusManager consumes wrong KEY_TYPED events + @author Oleg.Sukhodolsky: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main WrongKeyTypedConsumedTest */ -/** - * WrongKeyTypedConsumedTest.java - * - * summary: FocusManager consumes wrong KEYTYPED-Events - */ - import java.applet.Applet; - import java.awt.AWTException; import java.awt.AWTKeyStroke; import java.awt.BorderLayout; @@ -58,29 +53,19 @@ import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JTextArea; +import test.java.awt.regtesthelpers.Util; + public class WrongKeyTypedConsumedTest extends Applet { - //Declare things used in the test, like buttons and labels here + Robot robot = Util.createRobot(); - public void init() - { - //Create instructions for the user here, as well as set up - // the environment -- set the layout manager, add buttons, - // etc. - - String[] instructions = - { - "This is an AUTOMATIC test", - "simply wait until it is done" - }; - Sysout.createDialog( ); - Sysout.printInstructions( instructions ); - - }//End init() + public static void main(String[] args) { + WrongKeyTypedConsumedTest test = new WrongKeyTypedConsumedTest(); + test.start(); + } public void start () { - //Get things going. Request focus, set size, et cetera setSize (200,200); setVisible(true); validate(); @@ -100,194 +85,45 @@ public class WrongKeyTypedConsumedTest extends Applet frame.pack(); frame.setVisible(true); + Util.waitForIdle(robot); - try { - Robot robot = new Robot(); - - // wait for activation - robot.delay(2000); - if (!frame.isActive()) { - Point loc = frame.getLocationOnScreen(); - Dimension size = frame.getSize(); - robot.mouseMove(loc.x + size.width/2, - loc.y + size.height/2); - frame.toFront(); - robot.delay(1000); - if (!frame.isActive()) { - throw new RuntimeException("Test Fialed: frame isn't active"); - } - } - - // verify if checkbox has focus - if (!checkbox.isFocusOwner()) { - checkbox.requestFocusInWindow(); - robot.delay(1000); - if (!checkbox.isFocusOwner()) { - throw new RuntimeException("Test Failed: checkbox doesn't have focus"); - } - } - // press VK_DOWN - robot.keyPress(KeyEvent.VK_DOWN); - robot.delay(250); - robot.keyRelease(KeyEvent.VK_DOWN); - robot.delay(1000); - - // verify if text area has focus - if (!textarea.isFocusOwner()) { - throw new RuntimeException("Test Failed: focus wasn't transfered to text area"); - } - // press '1' - robot.keyPress(KeyEvent.VK_1); - robot.delay(250); - robot.keyRelease(KeyEvent.VK_1); - robot.delay(1000); - - // verify if KEY_TYPED arraived - if (!"1".equals(textarea.getText())) { - throw new RuntimeException("Test Failed: text area text is \"" + textarea.getText() + "\", not \"1\""); - } - } catch(AWTException e) { - e.printStackTrace(); - throw new RuntimeException("Test failed because of some internal exception"); + if (!frame.isActive()) { + throw new RuntimeException("Test Fialed: frame isn't active"); } - Sysout.println("Test Passed"); - }// start() -}// class WrongKeyTypedConsumedTest + // verify if checkbox has focus + if (!checkbox.isFocusOwner()) { + checkbox.requestFocusInWindow(); + Util.waitForIdle(robot); + if (!checkbox.isFocusOwner()) { + throw new RuntimeException("Test Failed: checkbox doesn't have focus"); + } + } -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ + // press VK_DOWN + robot.keyPress(KeyEvent.VK_DOWN); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_DOWN); + robot.delay(50); -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ + Util.waitForIdle(robot); -class Sysout -{ - private static TestDialog dialog; + // verify if text area has focus + if (!textarea.isFocusOwner()) { + throw new RuntimeException("Test Failed: focus wasn't transfered to text area"); + } + // press '1' + robot.keyPress(KeyEvent.VK_1); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_1); + robot.delay(50); - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); + Util.waitForIdle(robot); + + // verify if KEY_TYPED arrived + if (!"1".equals(textarea.getText())) { + throw new RuntimeException("Test Failed: text area text is \"" + textarea.getText() + "\", not \"1\""); + } + System.out.println("Test Passed"); } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - dialog.displayMessage( messageIn ); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - setVisible(true); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class +} From fa0a3d049573c2c93174bac0e56d302a5285e8a6 Mon Sep 17 00:00:00 2001 From: Anthony Petrov Date: Thu, 27 Mar 2008 11:08:37 +0300 Subject: [PATCH 09/46] 6603312: Segmentation fault running java -jar SwingSet2.jar in 256 color mode Force hiding the splashscreen if the code cannot allocate a reasonable number of color cells on PseudoColor displays Reviewed-by: son, art --- .../sun/awt/splashscreen/splashscreen_sys.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c b/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c index 859e3b4384d..bcbc98393af 100644 --- a/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c +++ b/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c @@ -436,6 +436,7 @@ SplashInitPlatform(Splash * splash) { break; } case PseudoColor: { + int availableColors; int numColors; int numComponents[3]; unsigned long colorIndex[SPLASH_COLOR_MAP_SIZE]; @@ -444,9 +445,20 @@ SplashInitPlatform(Splash * splash) { int depth = XDefaultDepthOfScreen(splash->screen); int scale = 65535 / MAX_COLOR_VALUE; - numColors = GetNumAvailableColors(splash->display, splash->screen, + availableColors = GetNumAvailableColors(splash->display, splash->screen, splash->visual->map_entries); - numColors = quantizeColors(numColors, numComponents); + numColors = quantizeColors(availableColors, numComponents); + if (numColors > availableColors) { + // Could not allocate the color cells. Most probably + // the pool got exhausted. Disable the splash screen. + XCloseDisplay(splash->display); + splash->isVisible = -1; + splash->display = NULL; + splash->screen = NULL; + splash->visual = NULL; + fprintf(stderr, "Warning: unable to initialize the splashscreen. Not enough available color cells.\n"); + return; + } splash->cmap = AllocColors(splash->display, splash->screen, numColors, colorIndex); for (i = 0; i < numColors; i++) { From b2b125f8a93bd33671928018eea4b8d3d2bbd147 Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Mon, 31 Mar 2008 15:41:56 +0400 Subject: [PATCH 10/46] 6508505: JComboBox collapses immediately if it is placed to embedded frame XWindowPeer should translate absolute coordinates to local Reviewed-by: son --- jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java index be679208974..c5fc7e1a7d4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java @@ -1974,8 +1974,9 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, // So, I do not want to implement complicated logic for better retargeting. target = pressTarget.isVisible() ? pressTarget : this; xme.set_window(target.getWindow()); - xme.set_x(xme.get_x_root() - target.getX()); - xme.set_y(xme.get_y_root() - target.getY()); + Point localCoord = target.toLocal(xme.get_x_root(), xme.get_y_root()); + xme.set_x(localCoord.x); + xme.set_y(localCoord.y); } grabLog.log(Level.FINER, " - Grab event target {0}", new Object[] {target}); if (target != null) { @@ -2026,8 +2027,9 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, // see 6390326 for more information. target = pressTarget.isVisible() ? pressTarget : this; xbe.set_window(target.getWindow()); - xbe.set_x(xbe.get_x_root() - target.getX()); - xbe.set_y(xbe.get_y_root() - target.getY()); + Point localCoord = target.toLocal(xbe.get_x_root(), xbe.get_y_root()); + xbe.set_x(localCoord.x); + xbe.set_y(localCoord.y); pressTarget = this; } if (target != null && target != getContentXWindow() && target != this) { From cfaf19f278767e57ea355daf9d04c9379f95f40f Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Mon, 31 Mar 2008 15:56:12 +0400 Subject: [PATCH 11/46] 6637204: TrayIcon.displayMessage fails to show icon twice The icon canvas should be validated to finalize its layout Reviewed-by: ant --- jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java index 5c8ccd02913..e3bfacb4353 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java @@ -833,6 +833,7 @@ public class XTrayIconPeer implements TrayIconPeer { Dimension tpSize = textPanel.getSize(); iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ? BALLOON_ICON_HEIGHT : tpSize.height)); + iconCanvas.validate(); } SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() { From 4eb04f83d50bd58d385f5e14f76c56bbd2b088f9 Mon Sep 17 00:00:00 2001 From: Anthony Petrov Date: Tue, 1 Apr 2008 17:38:46 +0400 Subject: [PATCH 12/46] 6681889: JSN security test headline/noWarningApp failed with NPE exception The java.awt.Component.changeSupportLock field should be initialized in the readObject() method. Reviewed-by: son, art --- jdk/src/share/classes/java/awt/Component.java | 6 +- ...opertyChangeListenerLockSerialization.java | 402 ++++++++++++++++++ 2 files changed, 407 insertions(+), 1 deletion(-) create mode 100644 jdk/test/java/awt/Window/PropertyChangeListenerLockSerialization/PropertyChangeListenerLockSerialization.java diff --git a/jdk/src/share/classes/java/awt/Component.java b/jdk/src/share/classes/java/awt/Component.java index b48b8c552fd..005a282442a 100644 --- a/jdk/src/share/classes/java/awt/Component.java +++ b/jdk/src/share/classes/java/awt/Component.java @@ -634,7 +634,9 @@ public abstract class Component implements ImageObserver, MenuContainer, */ private PropertyChangeSupport changeSupport; - private transient final Object changeSupportLock = new Object(); + // Note: this field is considered final, though readObject() prohibits + // initializing final fields. + private transient Object changeSupportLock = new Object(); private Object getChangeSupportLock() { return changeSupportLock; } @@ -8310,6 +8312,8 @@ public abstract class Component implements ImageObserver, MenuContainer, private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { + changeSupportLock = new Object(); + s.defaultReadObject(); appContext = AppContext.getAppContext(); diff --git a/jdk/test/java/awt/Window/PropertyChangeListenerLockSerialization/PropertyChangeListenerLockSerialization.java b/jdk/test/java/awt/Window/PropertyChangeListenerLockSerialization/PropertyChangeListenerLockSerialization.java new file mode 100644 index 00000000000..1a50818148a --- /dev/null +++ b/jdk/test/java/awt/Window/PropertyChangeListenerLockSerialization/PropertyChangeListenerLockSerialization.java @@ -0,0 +1,402 @@ +/* + * 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 6681889 + @summary Showing a deserialized frame should not throw NPE + @author anthony.petrov@...: area=awt.toplevel + @run main PropertyChangeListenerLockSerialization +*/ + + +/** + * PropertyChangeListenerLockSerialization.java + * + * summary: Showing a deserialized frame should not throw NPE + */ + +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; + +public class PropertyChangeListenerLockSerialization +{ + + private static void init() + { + //*** Create instructions for the user here *** + + String[] instructions = + { + "This is an AUTOMATIC test, simply wait until it is done.", + "The result (passed or failed) will be shown in the", + "message window below." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + File file = + new File(System.getProperty("test.classes", "."), "frame.ser"); + + Frame f = new Frame("Frame"); + f.setBounds(250, 50, 300, 300); + try { + OutputStream o = new FileOutputStream(file); + ObjectOutputStream oo = new ObjectOutputStream(o); + + oo.writeObject(f); + oo.close(); + } catch (IOException ex) { + ex.printStackTrace(); + fail("Unable to serialize the frame: " + ex); + } + + // Cleanup the frame + f.dispose(); + f = null; + + try { + ObjectInputStream i = new ObjectInputStream(new FileInputStream(file)); + + f = (Frame)i.readObject(); + f.show(); + } catch (NullPointerException ex) { + ex.printStackTrace(); + fail("The NullPointerException has been thrown: " + ex); + } catch (Exception ex) { + ex.printStackTrace(); + fail("Error while deserializing the frame: " + ex); + } + + // Cleanup the frame + f.dispose(); + f = null; + + pass(); + + }//End init() + + + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class PropertyChangeListenerLockSerialization + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// if want to make listeners, here is the recommended place for them, then instantiate +// them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + PropertyChangeListenerLockSerialization.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + PropertyChangeListenerLockSerialization.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + System.out.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class From e95ef5ac2170dd730b7923f7ba2b785fddde00c7 Mon Sep 17 00:00:00 2001 From: Roman Kennke Date: Wed, 2 Apr 2008 17:45:50 +0400 Subject: [PATCH 13/46] 6677332: incorrect signatures for JNI methods in XWindow.c and XlibWrapper.c Int replaced with jint in XWindow.c and WlibWrapper.c, and BOOL replaced with Bool in MouseInfo.c. Reviewed-by: anthony --- jdk/src/solaris/native/sun/awt/MouseInfo.c | 4 ++-- jdk/src/solaris/native/sun/xawt/XWindow.c | 2 +- jdk/src/solaris/native/sun/xawt/XlibWrapper.c | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/jdk/src/solaris/native/sun/awt/MouseInfo.c b/jdk/src/solaris/native/sun/awt/MouseInfo.c index 368ccab8cdd..f2716680174 100644 --- a/jdk/src/solaris/native/sun/awt/MouseInfo.c +++ b/jdk/src/solaris/native/sun/awt/MouseInfo.c @@ -54,7 +54,7 @@ Java_sun_awt_DefaultMouseInfoPeer_fillPointWithCoords(JNIEnv *env, jclass cls, int i; int32_t xr, yr, xw, yw; uint32_t keys; - BOOL pointerFound; + Bool pointerFound; AWT_LOCK(); if (pointClass == NULL) { @@ -102,7 +102,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_DefaultMouseInfoPeer_isWindowUnderMouse int32_t xr = 0, yr = 0, xw = 0, yw = 0; uint32_t keys = 0; uint32_t nchildren = 0; - BOOL pointerFound = 0; + Bool pointerFound = 0; struct FrameData *wdata = NULL; jobject winPeer = NULL; diff --git a/jdk/src/solaris/native/sun/xawt/XWindow.c b/jdk/src/solaris/native/sun/xawt/XWindow.c index a72187ef3fb..0690e58ad2c 100644 --- a/jdk/src/solaris/native/sun/xawt/XWindow.c +++ b/jdk/src/solaris/native/sun/xawt/XWindow.c @@ -1234,7 +1234,7 @@ Java_sun_awt_X11_XWindow_initIDs } } -JNIEXPORT int JNICALL +JNIEXPORT jint JNICALL Java_sun_awt_X11_XWindow_getKeySymForAWTKeyCode(JNIEnv* env, jclass clazz, jint keycode) { return awt_getX11KeySym(keycode); } diff --git a/jdk/src/solaris/native/sun/xawt/XlibWrapper.c b/jdk/src/solaris/native/sun/xawt/XlibWrapper.c index 01d5def24c4..6884b366f09 100644 --- a/jdk/src/solaris/native/sun/xawt/XlibWrapper.c +++ b/jdk/src/solaris/native/sun/xawt/XlibWrapper.c @@ -359,7 +359,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XDestroyWindow XDestroyWindow( (Display *)jlong_to_ptr(display),(Window) window); } -JNIEXPORT int JNICALL Java_sun_awt_X11_XlibWrapper_XGrabPointer +JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabPointer (JNIEnv *env, jclass clazz, jlong display, jlong window, jint owner_events, jint event_mask, jint pointer_mode, jint keyboard_mode, jlong confine_to, jlong cursor, jlong time) @@ -377,7 +377,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XUngrabPointer XUngrabPointer( (Display *)jlong_to_ptr(display), (Time) time); } -JNIEXPORT int JNICALL Java_sun_awt_X11_XlibWrapper_XGrabKeyboard +JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabKeyboard (JNIEnv *env, jclass clazz, jlong display, jlong window, jint owner_events, jint pointer_mode, jint keyboard_mode, jlong time) @@ -621,7 +621,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSync } -JNIEXPORT int JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates +JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates (JNIEnv *env, jclass clazz, jlong display, jlong src_w, jlong dest_w, jlong src_x, jlong src_y, jlong dest_x_return, jlong dest_y_return, jlong child_return) @@ -634,7 +634,7 @@ JNIEXPORT int JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates (Window *) jlong_to_ptr(child_return)); } -JNIEXPORT int JNICALL Java_sun_awt_X11_XlibWrapper_XEventsQueued +JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XEventsQueued (JNIEnv *env, jclass clazz, jlong display, jint mode) { AWT_CHECK_HAVE_LOCK(); From 194fc6af4304606d03685c05481445c43c72b8c2 Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Thu, 3 Apr 2008 15:00:21 +0400 Subject: [PATCH 14/46] 6619458: testcase depends on a file with the name te{st.html Using test.html instead of te{st.html in reg test Reviewed-by: son --- .../IOExceptionIfEncodedURLTest.java | 64 +++++ .../IOExceptionIfEncodedURLTest.sh | 231 ++++++++++++++++++ .../IOExceptionIfEncodedURLTest/test.html | 21 ++ 3 files changed, 316 insertions(+) create mode 100644 jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.java create mode 100644 jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh create mode 100644 jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/test.html diff --git a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.java b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.java new file mode 100644 index 00000000000..5d7a73e9996 --- /dev/null +++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.java @@ -0,0 +1,64 @@ +/* + * 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 6193279 + @summary REGRESSION: AppletViewer throws IOException when path is encoded URL + @author Dmitry Cherepanov: area=appletviewer + @run compile IOExceptionIfEncodedURLTest.java + @run main IOExceptionIfEncodedURLTest + @run shell IOExceptionIfEncodedURLTest.sh +*/ + +import java.applet.Applet; +import sun.net.www.ParseUtil; +import java.io.File; +import java.net.MalformedURLException; + +public class IOExceptionIfEncodedURLTest extends Applet{ + public void init(){ + } + + public void start(){ + // We check that appletviewer writes this message to log file + System.err.println("the appletviewer started"); + } + + // We expect that sun.net.www.ParseUtil.fileToEncodedURL works like following + // if relative file URL, like this "file:index.html" is processed + static String url = "file:IOExceptionIfEncodedURLTest.java"; + public static final void main(String args[]) + throws MalformedURLException{ + System.err.println("prior checking..."); + String prefix = "file:"; + String path = ParseUtil.fileToEncodedURL(new File(System.getProperty("user.dir"))).getPath(); + String filename = url.substring(prefix.length()); + System.err.println("url="+url+" -> path="+path+",filename="+filename); + + if (!path.endsWith("/") && !filename.startsWith("/")) { + throw new RuntimeException("Incorrect '/' processing"); + } + } + +} diff --git a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh new file mode 100644 index 00000000000..9df3e58741b --- /dev/null +++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/IOExceptionIfEncodedURLTest.sh @@ -0,0 +1,231 @@ +# +# 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. Sun designates this +# particular file as subject to the "Classpath" exception as provided +# by Sun in the LICENSE file that accompanied this code. +# +# 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. +# + +#!/bin/ksh -p +# +# @test IOExceptionIfEncodedURLTest.sh +# @bug 6193279 6619458 +# @summary REGRESSION: AppletViewer throws IOException when path is encoded URL +# @author Dmitry Cherepanov: area=appletviewer +# @run compile IOExceptionIfEncodedURLTest.java +# @run main IOExceptionIfEncodedURLTest +# @run shell IOExceptionIfEncodedURLTest.sh + +# Beginning of subroutines: +status=1 + +#Call this from anywhere to fail the test with an error message +# usage: fail "reason why the test failed" +fail() + { echo "The test failed :-(" + echo "$*" 1>&2 + echo "exit status was $status" + exit $status + } #end of fail() + +#Call this from anywhere to pass the test with a message +# usage: pass "reason why the test passed if applicable" +pass() + { echo "The test passed!!!" + echo "$*" 1>&2 + exit 0 + } #end of pass() + +#Call this to run the test with a file name +test() + { + ${TESTJAVA}${FILESEP}bin${FILESEP}appletviewer -Xnosecurity ${URL} > err 2>&1 & + APPLET_ID=$! + sleep 15 + kill -9 $APPLET_ID + + # these exceptions will be thrown if the test fails + cat err | grep "I/O exception while reading" + exception=$? + if [ $exception = "0" ]; + then fail "test failed for "${URL}", see err file and CRs #6193279,6329251,6376334" + fi + + cat err | grep "java.lang.ClassNotFoundException" + exception=$? + if [ $exception = "0" ]; + then fail "test failed for "${URL}", see err file and CRs #6193279,6329251,6376334" + fi + + # the applet will log the same message + cat err | grep "the appletviewer started" + started=$? + + echo $started | grep "2" + if [ $? = 0 ] ; + then fail "test failed for "${URL}": syntax errors or inaccessible files" + fi + + if [ $started = "0" ]; + then echo "the test passed for "${URL} + else fail "test failed for "${URL}": the appletviewer behaviour is unexpected: "$started", see err file" + fi + } + +# end of subroutines + + +# The beginning of the script proper + +# Checking for proper OS +OS=`uname -s` +case "$OS" in + SunOS ) + VAR="One value for Sun" + DEFAULT_JDK=/usr/local/java/jdk1.2.1/solaris + FILESEP="/" + ;; + + Linux ) + VAR="A different value for Linux" + DEFAULT_JDK=/usr/local/java/jdk1.4/linux-i386 + FILESEP="/" + ;; + + Windows_95 | Windows_98 | Windows_NT | Windows_ME | CYGWIN_NT-5.1) + VAR="A different value for Win32" + DEFAULT_JDK=/usr/local/java/jdk1.2.1/win32 + FILESEP="\\" + ;; + + # catch all other OSs + * ) + echo "Unrecognized system! $OS" + fail "Unrecognized system! $OS" + ;; +esac + +# 6438730: Only a minimal set of env variables are set for shell tests. +# To guarantee that env variable holds correct value we need to set it ourselves. +if [ -z "${PWD}" ] ; then + PWD=`pwd` +fi + +# check that some executable or other file you need is available, abort if not +# note that the name of the executable is in the fail string as well. +# this is how to check for presence of the compiler, etc. +#RESOURCE=`whence SomeProgramOrFileNeeded` +#if [ "${RESOURCE}" = "" ] ; +# then fail "Need SomeProgramOrFileNeeded to perform the test" ; +#fi + +# Want this test to run standalone as well as in the harness, so do the +# following to copy the test's directory into the harness's scratch directory +# and set all appropriate variables: + +if [ -z "${TESTJAVA}" ] ; then + # TESTJAVA is not set, so the test is running stand-alone. + # TESTJAVA holds the path to the root directory of the build of the JDK + # to be tested. That is, any java files run explicitly in this shell + # should use TESTJAVA in the path to the java interpreter. + # So, we'll set this to the JDK spec'd on the command line. If none + # is given on the command line, tell the user that and use a cheesy + # default. + # THIS IS THE JDK BEING TESTED. + if [ -n "$1" ] ; + then TESTJAVA=$1 + else echo "no JDK specified on command line so using default!" + TESTJAVA=$DEFAULT_JDK + fi + TESTSRC=. + TESTCLASSES=. + STANDALONE=1; +fi +echo "JDK under test is: $TESTJAVA" + +#Deal with .class files: +if [ -n "${STANDALONE}" ] ; + then + #if standalone, remind user to cd to dir. containing test before running it + echo "Just a reminder: cd to the dir containing this test when running it" + # then compile all .java files (if there are any) into .class files + if [ -a *.java ] ; + then echo "Reminder, this test should be in its own directory with all" + echo "supporting files it needs in the directory with it." + ${TESTJAVA}/bin/javac ./*.java ; + fi + # else in harness so copy all the class files from where jtreg put them + # over to the scratch directory this test is running in. + else cp ${TESTCLASSES}/*.class . ; +fi + +#if in test harness, then copy the entire directory that the test is in over +# to the scratch directory. This catches any support files needed by the test. +#if [ -z "${STANDALONE}" ] ; +# then cp ${TESTSRC}/* . +#fi + +#Just before executing anything, make sure it has executable permission! +chmod 777 ./* + +############### YOUR TEST CODE HERE!!!!!!! ############# + +#All files required for the test should be in the same directory with +# this file. If converting a standalone test to run with the harness, +# as long as all files are in the same directory and it returns 0 for +# pass, you should be able to cut and paste it into here and it will +# run with the test harness. + +# This is an example of running something -- test +# The stuff below catches the exit status of test then passes or fails +# this shell test as appropriate ( 0 status is considered a pass here ) + +# The test verifies that appletviewer correctly works with the different +# names of the files, including relative and absolute paths + +# 6619458: exclude left brace from the name of the files managed by the VCS +NAME='test.html' + +ENCODED='te%7Bst.html' +UNENCODED='te{st.html' + +# Copy needed files into the harness's scratch directory +# or create a copy with the required name if the test is +# running as stand-alone +cp ${TESTSRC}${FILESEP}${NAME} ${UNENCODED} + +# the encoded name, the path is absolute +URL="file:"${PWD}${FILESEP}${ENCODED} +test + +# the encoded name, the path is relative +URL="file:"${ENCODED} +test + +# the unencoded name, the path is absolute +URL="file:"${PWD}${FILESEP}${UNENCODED} +test + +# the unencoded name, the path is relative +URL="file:"${UNENCODED} +test + +# pick up our toys from the scratch directory +rm ${UNENCODED} diff --git a/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/test.html b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/test.html new file mode 100644 index 00000000000..104905bc4ea --- /dev/null +++ b/jdk/test/java/awt/appletviewer/IOExceptionIfEncodedURLTest/test.html @@ -0,0 +1,21 @@ + + + +Started by shell script + + + +

IOExceptionIfEncodedURLTest
Bug ID: 6193279

+ +

See the dialog box (usually in upper left corner) for instructions

+ + + + \ No newline at end of file From a602ec9fb2dbdd710f428de017a7759c99cceeff Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Thu, 3 Apr 2008 15:48:10 +0400 Subject: [PATCH 15/46] 6615015: Typo in javadoc for Component.getTreeLock() Fix for typo Reviewed-by: son --- jdk/src/share/classes/java/awt/Component.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdk/src/share/classes/java/awt/Component.java b/jdk/src/share/classes/java/awt/Component.java index 005a282442a..1bbd4dcf45b 100644 --- a/jdk/src/share/classes/java/awt/Component.java +++ b/jdk/src/share/classes/java/awt/Component.java @@ -1005,7 +1005,7 @@ public abstract class Component implements ImageObserver, MenuContainer, /** * Gets this component's locking object (the object that owns the thread - * sychronization monitor) for AWT component-tree and layout + * synchronization monitor) for AWT component-tree and layout * operations. * @return this component's locking object */ From a61087c7628bf61405b90ff48eff3ef171f170d4 Mon Sep 17 00:00:00 2001 From: Peter Zhelezniakov Date: Thu, 3 Apr 2008 16:41:43 +0400 Subject: [PATCH 16/46] 4714674: JEditorPane.setPage(url) blocks AWT thread when HTTP protocol is used Both POST and GET can now be processed asynchronously; PageLoader refactored Reviewed-by: gsm --- .../classes/javax/swing/JEditorPane.java | 125 +++++------------- .../javax/swing/JEditorPane/bug4714674.java | 124 +++++++++++++++++ 2 files changed, 155 insertions(+), 94 deletions(-) create mode 100644 jdk/test/javax/swing/JEditorPane/bug4714674.java diff --git a/jdk/src/share/classes/javax/swing/JEditorPane.java b/jdk/src/share/classes/javax/swing/JEditorPane.java index 8395075295f..4cf18c009c3 100644 --- a/jdk/src/share/classes/javax/swing/JEditorPane.java +++ b/jdk/src/share/classes/javax/swing/JEditorPane.java @@ -429,9 +429,8 @@ public class JEditorPane extends JTextComponent { // different url or POST method, load the new content int p = getAsynchronousLoadPriority(getDocument()); - if ((postData == null) || (p < 0)) { - // Either we do not have POST data, or should submit the data - // synchronously. + if (p < 0) { + // open stream synchronously InputStream in = getStream(page); if (kit != null) { Document doc = initializeModel(kit, page); @@ -440,22 +439,13 @@ public class JEditorPane extends JTextComponent { // view notifications slowing it down (i.e. best synchronous // behavior) or set the model and start to feed it on a separate // thread (best asynchronous behavior). - synchronized(this) { - if (loading != null) { - // we are loading asynchronously, so we need to cancel - // the old stream. - loading.cancel(); - loading = null; - } - } p = getAsynchronousLoadPriority(doc); if (p >= 0) { // load asynchronously setDocument(doc); synchronized(this) { - loading = new PageStream(in); - Thread pl = new PageLoader(doc, loading, p, loaded, page); - pl.start(); + pageLoader = new PageLoader(doc, in, loaded, page); + pageLoader.execute(); } return; } @@ -464,11 +454,15 @@ public class JEditorPane extends JTextComponent { reloaded = true; } } else { - // We have POST data and should send it asynchronously. - // Send (and subsequentally read) data in separate thread. + // we may need to cancel background loading + if (pageLoader != null) { + pageLoader.cancel(true); + } + + // Do everything in a background thread. // Model initialization is deferred to that thread, too. - Thread pl = new PageLoader(null, null, p, loaded, page); - pl.start(); + pageLoader = new PageLoader(null, null, loaded, page); + pageLoader.execute(); return; } } @@ -604,44 +598,38 @@ public class JEditorPane extends JTextComponent { /** - * Thread to load a stream into the text document model. + * Loads a stream into the text document model. */ - class PageLoader extends Thread { + class PageLoader extends SwingWorker { /** * Construct an asynchronous page loader. */ - PageLoader(Document doc, InputStream in, int priority, URL old, - URL page) { - setPriority(priority); + PageLoader(Document doc, InputStream in, URL old, URL page) { this.in = in; this.old = old; this.page = page; this.doc = doc; } - boolean pageLoaded = false; - /** * Try to load the document, then scroll the view * to the reference (if specified). When done, fire * a page property change event. */ - public void run() { + protected URL doInBackground() { + boolean pageLoaded = false; try { if (in == null) { in = getStream(page); if (kit == null) { // We received document of unknown content type. - UIManager.getLookAndFeel().provideErrorFeedback( - JEditorPane.this); - return; - } - // Access to loading should be synchronized. - synchronized(JEditorPane.this) { - in = loading = new PageStream(in); + UIManager.getLookAndFeel(). + provideErrorFeedback(JEditorPane.this); + return old; } } + if (doc == null) { try { SwingUtilities.invokeAndWait(new Runnable() { @@ -653,11 +641,11 @@ public class JEditorPane extends JTextComponent { } catch (InvocationTargetException ex) { UIManager.getLookAndFeel().provideErrorFeedback( JEditorPane.this); - return; + return old; } catch (InterruptedException ex) { UIManager.getLookAndFeel().provideErrorFeedback( JEditorPane.this); - return; + return old; } } @@ -682,16 +670,14 @@ public class JEditorPane extends JTextComponent { } catch (IOException ioe) { UIManager.getLookAndFeel().provideErrorFeedback(JEditorPane.this); } finally { - synchronized(JEditorPane.this) { - loading = null; - } - SwingUtilities.invokeLater(new Runnable() { - public void run() { - if (pageLoaded) { - firePropertyChange("page", old, page); + if (pageLoaded) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + JEditorPane.this.firePropertyChange("page", old, page); } - } - }); + }); + } + return (pageLoaded ? page : old); } } @@ -718,51 +704,6 @@ public class JEditorPane extends JTextComponent { Document doc; } - static class PageStream extends FilterInputStream { - - boolean canceled; - - public PageStream(InputStream i) { - super(i); - canceled = false; - } - - /** - * Cancel the loading of the stream by throwing - * an IOException on the next request. - */ - public synchronized void cancel() { - canceled = true; - } - - protected synchronized void checkCanceled() throws IOException { - if (canceled) { - throw new IOException("page canceled"); - } - } - - public int read() throws IOException { - checkCanceled(); - return super.read(); - } - - public long skip(long n) throws IOException { - checkCanceled(); - return super.skip(n); - } - - public int available() throws IOException { - checkCanceled(); - return super.available(); - } - - public void reset() throws IOException { - checkCanceled(); - super.reset(); - } - - } - /** * Fetches a stream for the given URL, which is about to * be loaded by the setPage method. By @@ -1573,11 +1514,7 @@ public class JEditorPane extends JTextComponent { // --- variables --------------------------------------- - /** - * Stream currently loading asynchronously (potentially cancelable). - * Access to this variable should be synchronized. - */ - PageStream loading; + private SwingWorker pageLoader; /** * Current content binding of the editor. diff --git a/jdk/test/javax/swing/JEditorPane/bug4714674.java b/jdk/test/javax/swing/JEditorPane/bug4714674.java new file mode 100644 index 00000000000..a3426144330 --- /dev/null +++ b/jdk/test/javax/swing/JEditorPane/bug4714674.java @@ -0,0 +1,124 @@ +/* @test + @bug 4714674 + @summary Tests that JEditorPane opens HTTP connection asynchronously + @author Peter Zhelezniakov + @run main bug4714674 +*/ + +import javax.swing.*; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.concurrent.Executors; + + +public class bug4714674 { + + public static void main(String[] args) throws Exception { + new bug4714674().test(); + } + + private void test() throws Exception { + final DeafServer server = new DeafServer(); + final String baseURL = "http://localhost:" + server.getPort() + "/"; + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + try { + JEditorPane pane = new JEditorPane(); + ((javax.swing.text.AbstractDocument)pane.getDocument()). + setAsynchronousLoadPriority(1); + + // this will block EDT unless 4714674 is fixed + pane.setPage(baseURL); + } catch (IOException e) { + // should not happen + throw new Error(e); + } + } + }); + + // if 4714674 is fixed, this executes before connection times out + SwingUtilities.invokeLater(new Runnable() { + public void run() { + synchronized (server) { + server.wakeup = true; + server.notifyAll(); + } + pass(); + } + }); + + // wait, then check test status + try { + Thread.sleep(5000); + if (!passed()) { + throw new RuntimeException("Failed: EDT was blocked"); + } + } finally { + server.destroy(); + } + } + + private boolean passed = false; + + private synchronized boolean passed() { + return passed; + } + + private synchronized void pass() { + passed = true; + } +} + +/** + * A "deaf" HTTP server that does not respond to requests. + */ +class DeafServer { + HttpServer server; + boolean wakeup = false; + + /** + * Create and start the HTTP server. + */ + public DeafServer() throws IOException { + InetSocketAddress addr = new InetSocketAddress(0); + server = HttpServer.create(addr, 0); + HttpHandler handler = new DeafHandler(); + server.createContext("/", handler); + server.setExecutor(Executors.newCachedThreadPool()); + server.start(); + } + + /** + * Stop server without any delay. + */ + public void destroy() { + server.stop(0); + } + + /** + * Return actual server port number, useful for constructing request URIs. + */ + public int getPort() { + return server.getAddress().getPort(); + } + + + class DeafHandler implements HttpHandler { + public void handle(HttpExchange r) throws IOException { + synchronized (DeafServer.this) { + while (! wakeup) { + try { + DeafServer.this.wait(); + } catch (InterruptedException e) { + // just wait again + } + } + } + } + } +} From c54c100fd7e8b78559cea77ca008a7887292452b Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Fri, 4 Apr 2008 20:20:16 +0400 Subject: [PATCH 17/46] 6573289: api/java_awt/Color/index.html#CreateContextTesttestCase4,5,6,7 fail since JDK 7 b14 Specify current behavior - not caching the painting context Reviewed-by: flar, son --- jdk/src/share/classes/java/awt/Color.java | 40 +++++++---- .../share/classes/java/awt/GradientPaint.java | 36 +++++++--- .../classes/java/awt/LinearGradientPaint.java | 27 +++++++- jdk/src/share/classes/java/awt/Paint.java | 68 ++++++++++++------- .../classes/java/awt/RadialGradientPaint.java | 26 ++++++- .../share/classes/java/awt/TexturePaint.java | 39 +++++++---- 6 files changed, 169 insertions(+), 67 deletions(-) diff --git a/jdk/src/share/classes/java/awt/Color.java b/jdk/src/share/classes/java/awt/Color.java index c06b573d7ca..22a8455f2b5 100644 --- a/jdk/src/share/classes/java/awt/Color.java +++ b/jdk/src/share/classes/java/awt/Color.java @@ -51,6 +51,7 @@ import java.awt.color.ColorSpace; * http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html * . *

+ * @version 10 Feb 1997 * @author Sami Shaio * @author Arthur van Hoff * @see ColorSpace @@ -1176,23 +1177,32 @@ public class Color implements Paint, java.io.Serializable { } /** - * Creates and returns a {@link PaintContext} used to generate a solid - * color pattern. This enables a Color object to be used - * as an argument to any method requiring an object implementing the - * {@link Paint} interface. - * The same PaintContext is returned, regardless of - * whether or not r, r2d, - * xform, or hints are null. - * @param cm the specified ColorModel - * @param r the specified {@link Rectangle} - * @param r2d the specified {@link Rectangle2D} - * @param xform the specified {@link AffineTransform} - * @param hints the specified {@link RenderingHints} - * @return a PaintContext that is used to generate a - * solid color pattern. + * Creates and returns a {@link PaintContext} used to + * generate a solid color field pattern. + * See the {@link Paint#createContext specification} of the + * method in the {@link Paint} interface for information + * on null parameter handling. + * + * @param cm the preferred {@link ColorModel} which represents the most convenient + * format for the caller to receive the pixel data, or {@code null} + * if there is no preference. + * @param r the device space bounding box + * of the graphics primitive being rendered. + * @param r2d the user space bounding box + * of the graphics primitive being rendered. + * @param xform the {@link AffineTransform} from user + * space into device space. + * @param hints the set of hints that the context object can use to + * choose between rendering alternatives. + * @return the {@code PaintContext} for + * generating color patterns. * @see Paint * @see PaintContext - * @see Graphics2D#setPaint + * @see ColorModel + * @see Rectangle + * @see Rectangle2D + * @see AffineTransform + * @see RenderingHints */ public synchronized PaintContext createContext(ColorModel cm, Rectangle r, Rectangle2D r2d, diff --git a/jdk/src/share/classes/java/awt/GradientPaint.java b/jdk/src/share/classes/java/awt/GradientPaint.java index 840e7aec826..105fcd1f607 100644 --- a/jdk/src/share/classes/java/awt/GradientPaint.java +++ b/jdk/src/share/classes/java/awt/GradientPaint.java @@ -53,6 +53,7 @@ import java.awt.image.ColorModel; * * @see Paint * @see Graphics2D#setPaint + * @version 10 Feb 1997 */ public class GradientPaint implements Paint { @@ -223,19 +224,32 @@ public class GradientPaint implements Paint { } /** - * Creates and returns a context used to generate the color pattern. - * @param cm {@link ColorModel} that receives - * the Paint data. This is used only as a hint. - * @param deviceBounds the device space bounding box of the - * graphics primitive being rendered - * @param userBounds the user space bounding box of the - * graphics primitive being rendered + * Creates and returns a {@link PaintContext} used to + * generate a linear color gradient pattern. + * See the {@link Paint#createContext specification} of the + * method in the {@link Paint} interface for information + * on null parameter handling. + * + * @param cm the preferred {@link ColorModel} which represents the most convenient + * format for the caller to receive the pixel data, or {@code null} + * if there is no preference. + * @param deviceBounds the device space bounding box + * of the graphics primitive being rendered. + * @param userBounds the user space bounding box + * of the graphics primitive being rendered. * @param xform the {@link AffineTransform} from user - * space into device space - * @param hints the hints that the context object uses to choose - * between rendering alternatives - * @return the {@link PaintContext} that generates color patterns. + * space into device space. + * @param hints the set of hints that the context object can use to + * choose between rendering alternatives. + * @return the {@code PaintContext} for + * generating color patterns. + * @see Paint * @see PaintContext + * @see ColorModel + * @see Rectangle + * @see Rectangle2D + * @see AffineTransform + * @see RenderingHints */ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, diff --git a/jdk/src/share/classes/java/awt/LinearGradientPaint.java b/jdk/src/share/classes/java/awt/LinearGradientPaint.java index ea5a7339d16..2cf21cbe86d 100644 --- a/jdk/src/share/classes/java/awt/LinearGradientPaint.java +++ b/jdk/src/share/classes/java/awt/LinearGradientPaint.java @@ -296,7 +296,32 @@ public final class LinearGradientPaint extends MultipleGradientPaint { } /** - * {@inheritDoc} + * Creates and returns a {@link PaintContext} used to + * generate a linear color gradient pattern. + * See the {@link Paint#createContext specification} of the + * method in the {@link Paint} interface for information + * on null parameter handling. + * + * @param cm the preferred {@link ColorModel} which represents the most convenient + * format for the caller to receive the pixel data, or {@code null} + * if there is no preference. + * @param deviceBounds the device space bounding box + * of the graphics primitive being rendered. + * @param userBounds the user space bounding box + * of the graphics primitive being rendered. + * @param transform the {@link AffineTransform} from user + * space into device space. + * @param hints the set of hints that the context object can use to + * choose between rendering alternatives. + * @return the {@code PaintContext} for + * generating color patterns. + * @see Paint + * @see PaintContext + * @see ColorModel + * @see Rectangle + * @see Rectangle2D + * @see AffineTransform + * @see RenderingHints */ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, diff --git a/jdk/src/share/classes/java/awt/Paint.java b/jdk/src/share/classes/java/awt/Paint.java index 07c4274a08f..8e572db7eab 100644 --- a/jdk/src/share/classes/java/awt/Paint.java +++ b/jdk/src/share/classes/java/awt/Paint.java @@ -46,42 +46,58 @@ import java.awt.geom.Rectangle2D; * @see GradientPaint * @see TexturePaint * @see Graphics2D#setPaint + * @version 1.36, 06/05/07 */ public interface Paint extends Transparency { /** * Creates and returns a {@link PaintContext} used to * generate the color pattern. - * Since the ColorModel argument to createContext is only a - * hint, implementations of Paint should accept a null argument - * for ColorModel. Note that if the application does not - * prefer a specific ColorModel, the null ColorModel argument - * will give the Paint implementation full leeway in using the - * most efficient ColorModel it prefers for its raster processing. - *

- * Since the API documentation was not specific about this in - * releases before 1.4, there may be implementations of - * Paint that do not accept a null - * ColorModel argument. - * If a developer is writing code which passes a null - * ColorModel argument to the - * createContext method of Paint - * objects from arbitrary sources it would be wise to code defensively - * by manufacturing a non-null ColorModel for those - * objects which throw a NullPointerException. - * @param cm the {@link ColorModel} that receives the - * Paint data. This is used only as a hint. + * The arguments to this method convey additional information + * about the rendering operation that may be + * used or ignored on various implementations of the {@code Paint} interface. + * A caller must pass non-{@code null} values for all of the arguments + * except for the {@code ColorModel} argument which may be {@code null} to + * indicate that no specific {@code ColorModel} type is preferred. + * Implementations of the {@code Paint} interface are allowed to use or ignore + * any of the arguments as makes sense for their function, and are + * not constrained to use the specified {@code ColorModel} for the returned + * {@code PaintContext}, even if it is not {@code null}. + * Implementations are allowed to throw {@code NullPointerException} for + * any {@code null} argument other than the {@code ColorModel} argument, + * but are not required to do so. + * + * @param cm the preferred {@link ColorModel} which represents the most convenient + * format for the caller to receive the pixel data, or {@code null} + * if there is no preference. * @param deviceBounds the device space bounding box - * of the graphics primitive being rendered + * of the graphics primitive being rendered. + * Implementations of the {@code Paint} interface + * are allowed to throw {@code NullPointerException} + * for a {@code null} {@code deviceBounds}. * @param userBounds the user space bounding box - * of the graphics primitive being rendered + * of the graphics primitive being rendered. + * Implementations of the {@code Paint} interface + * are allowed to throw {@code NullPointerException} + * for a {@code null} {@code userBounds}. * @param xform the {@link AffineTransform} from user - * space into device space - * @param hints the hint that the context object uses to - * choose between rendering alternatives - * @return the PaintContext for - * generating color patterns + * space into device space. + * Implementations of the {@code Paint} interface + * are allowed to throw {@code NullPointerException} + * for a {@code null} {@code xform}. + * @param hints the set of hints that the context object can use to + * choose between rendering alternatives. + * Implementations of the {@code Paint} interface + * are allowed to throw {@code NullPointerException} + * for a {@code null} {@code hints}. + * @return the {@code PaintContext} for + * generating color patterns. * @see PaintContext + * @see ColorModel + * @see Rectangle + * @see Rectangle2D + * @see AffineTransform + * @see RenderingHints */ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, diff --git a/jdk/src/share/classes/java/awt/RadialGradientPaint.java b/jdk/src/share/classes/java/awt/RadialGradientPaint.java index 278906bb771..494daa57d1e 100644 --- a/jdk/src/share/classes/java/awt/RadialGradientPaint.java +++ b/jdk/src/share/classes/java/awt/RadialGradientPaint.java @@ -543,7 +543,31 @@ public final class RadialGradientPaint extends MultipleGradientPaint { } /** - * {@inheritDoc} + * Creates and returns a {@link PaintContext} used to + * generate a circular radial color gradient pattern. + * See the description of the {@link Paint#createContext createContext} method + * for information on null parameter handling. + * + * @param cm the preferred {@link ColorModel} which represents the most convenient + * format for the caller to receive the pixel data, or {@code null} + * if there is no preference. + * @param deviceBounds the device space bounding box + * of the graphics primitive being rendered. + * @param userBounds the user space bounding box + * of the graphics primitive being rendered. + * @param transform the {@link AffineTransform} from user + * space into device space. + * @param hints the set of hints that the context object can use to + * choose between rendering alternatives. + * @return the {@code PaintContext} for + * generating color patterns. + * @see Paint + * @see PaintContext + * @see ColorModel + * @see Rectangle + * @see Rectangle2D + * @see AffineTransform + * @see RenderingHints */ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, diff --git a/jdk/src/share/classes/java/awt/TexturePaint.java b/jdk/src/share/classes/java/awt/TexturePaint.java index 7c5dd5de01e..c4054e5783a 100644 --- a/jdk/src/share/classes/java/awt/TexturePaint.java +++ b/jdk/src/share/classes/java/awt/TexturePaint.java @@ -45,6 +45,7 @@ import java.awt.image.ColorModel; * replicated Rectangle2D. * @see Paint * @see Graphics2D#setPaint + * @version 1.48, 06/05/07 */ public class TexturePaint implements Paint { @@ -93,20 +94,32 @@ public class TexturePaint implements Paint { } /** - * Creates and returns a context used to generate the color pattern. - * @param cm the {@link ColorModel} that receives the - * Paint data. This is used only as a hint. - * @param deviceBounds the device space bounding box of the graphics - * primitive being rendered - * @param userBounds the user space bounding box of the graphics - * primitive being rendered - * @param xform the {@link AffineTransform} from user space - * into device space - * @param hints a {@link RenderingHints} object that can be used to - * specify how the pattern is ultimately rendered - * @return the {@link PaintContext} used for generating color - * patterns. + * Creates and returns a {@link PaintContext} used to + * generate a tiled image pattern. + * See the {@link Paint#createContext specification} of the + * method in the {@link Paint} interface for information + * on null parameter handling. + * + * @param cm the preferred {@link ColorModel} which represents the most convenient + * format for the caller to receive the pixel data, or {@code null} + * if there is no preference. + * @param deviceBounds the device space bounding box + * of the graphics primitive being rendered. + * @param userBounds the user space bounding box + * of the graphics primitive being rendered. + * @param xform the {@link AffineTransform} from user + * space into device space. + * @param hints the set of hints that the context object can use to + * choose between rendering alternatives. + * @return the {@code PaintContext} for + * generating color patterns. + * @see Paint * @see PaintContext + * @see ColorModel + * @see Rectangle + * @see Rectangle2D + * @see AffineTransform + * @see RenderingHints */ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, From f3cc321cb27cf735a02905ecefa86640e13c59e0 Mon Sep 17 00:00:00 2001 From: Peter Zhelezniakov Date: Mon, 7 Apr 2008 13:07:04 +0400 Subject: [PATCH 18/46] 4765383: JTextArea.append(String) not thread safe Several swing.text methods are not marked thread-safe anymore. Reviewed-by: gsm --- .../classes/javax/swing/JEditorPane.java | 10 ------- .../share/classes/javax/swing/JTextArea.java | 15 ---------- .../share/classes/javax/swing/JTextPane.java | 30 ------------------- .../javax/swing/text/JTextComponent.java | 11 +------ 4 files changed, 1 insertion(+), 65 deletions(-) diff --git a/jdk/src/share/classes/javax/swing/JEditorPane.java b/jdk/src/share/classes/javax/swing/JEditorPane.java index 4cf18c009c3..c126fe70c01 100644 --- a/jdk/src/share/classes/javax/swing/JEditorPane.java +++ b/jdk/src/share/classes/javax/swing/JEditorPane.java @@ -1120,11 +1120,6 @@ public class JEditorPane extends JTextComponent { * current selection. The replacement text will have the * attributes currently defined for input. If the component is not * editable, beep and return. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param content the content to replace the selection with. This * value can be null @@ -1395,11 +1390,6 @@ public class JEditorPane extends JTextComponent { * create a StringReader and call the read method. In this case the model * would be replaced after it was initialized with the contents of the * string. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param t the new text to be set; if null the old * text will be deleted diff --git a/jdk/src/share/classes/javax/swing/JTextArea.java b/jdk/src/share/classes/javax/swing/JTextArea.java index 8f53daf2aca..f7718198bf7 100644 --- a/jdk/src/share/classes/javax/swing/JTextArea.java +++ b/jdk/src/share/classes/javax/swing/JTextArea.java @@ -444,11 +444,6 @@ public class JTextArea extends JTextComponent { /** * Inserts the specified text at the specified position. Does nothing * if the model is null or if the text is null or empty. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param str the text to insert * @param pos the position at which to insert >= 0 @@ -471,11 +466,6 @@ public class JTextArea extends JTextComponent { /** * Appends the given text to the end of the document. Does nothing if * the model is null or the string is null or empty. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param str the text to insert * @see #insert @@ -494,11 +484,6 @@ public class JTextArea extends JTextComponent { * Replaces text from the indicated start to end position with the * new text specified. Does nothing if the model is null. Simply * does a delete if the new string is null or empty. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param str the text to use as the replacement * @param start the start position >= 0 diff --git a/jdk/src/share/classes/javax/swing/JTextPane.java b/jdk/src/share/classes/javax/swing/JTextPane.java index 69b94a30e42..c820f512d7e 100644 --- a/jdk/src/share/classes/javax/swing/JTextPane.java +++ b/jdk/src/share/classes/javax/swing/JTextPane.java @@ -167,11 +167,6 @@ public class JTextPane extends JEditorPane { * current selection. The replacement text will have the * attributes currently defined for input at the point of * insertion. If the document is not editable, beep and return. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param content the content to replace the selection with */ @@ -229,11 +224,6 @@ public class JTextPane extends JEditorPane { * a value of 0.75 will cause 75 percent of the * component to be above the baseline, and 25 percent of the * component to be below the baseline. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param c the component to insert */ @@ -252,11 +242,6 @@ public class JTextPane extends JEditorPane { * current position of the caret. This is represented in * the associated document as an attribute of one character * of content. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param g the icon to insert * @see Icon @@ -320,11 +305,6 @@ public class JTextPane extends JEditorPane { * through the logical style assigned to the paragraph, which * in term may resolve through some hierarchy completely * independent of the element hierarchy in the document. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param s the logical style to assign to the paragraph, * or null for no style @@ -367,11 +347,6 @@ public class JTextPane extends JEditorPane { * is no selection, the attributes are applied to * the input attribute set which defines the attributes * for any new text that gets inserted. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param attr the attributes * @param replace if true, then replace the existing attributes first @@ -412,11 +387,6 @@ public class JTextPane extends JEditorPane { * to the paragraphs that intersect the selection. * If there is no selection, the attributes are applied * to the paragraph at the current caret position. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param attr the non-null attributes * @param replace if true, replace the existing attributes first diff --git a/jdk/src/share/classes/javax/swing/text/JTextComponent.java b/jdk/src/share/classes/javax/swing/text/JTextComponent.java index 9ba89895682..d340f281eff 100644 --- a/jdk/src/share/classes/javax/swing/text/JTextComponent.java +++ b/jdk/src/share/classes/javax/swing/text/JTextComponent.java @@ -1349,11 +1349,6 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * This is the method that is used by the default implementation * of the action for inserting content that gets bound to the * keymap actions. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * * @param content the content to replace the selection with */ @@ -1687,12 +1682,8 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * or empty, has the effect of simply deleting the old text. * When text has been inserted, the resulting caret location * is determined by the implementation of the caret class. - *

- * This method is thread safe, although most Swing methods - * are not. Please see - * How - * to Use Threads for more information. * + *

* Note that text is not a bound property, so no PropertyChangeEvent * is fired when it changes. To listen for changes to the text, * use DocumentListener. From 0e36651f33707dfd5761bd2242b8793f24b6659e Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Mon, 7 Apr 2008 14:53:51 +0400 Subject: [PATCH 19/46] 6613529: Avoid duplicate object creation within JDK packages Avoid using constructors when unique values are not necessary Reviewed-by: volk, igor, peterz --- .../imageio/plugins/gif/GIFImageReader.java | 2 +- .../plugins/gif/GIFWritableImageMetadata.java | 2 +- .../swing/plaf/gtk/GTKColorChooserPanel.java | 30 ++++----- .../java/swing/plaf/gtk/GTKLookAndFeel.java | 32 +++++----- .../com/sun/java/swing/plaf/gtk/GTKStyle.java | 14 ++--- .../com/sun/java/swing/plaf/gtk/Metacity.java | 4 +- .../swing/plaf/motif/MotifLookAndFeel.java | 14 ++--- .../plaf/windows/WindowsLookAndFeel.java | 62 +++++++++---------- jdk/src/share/classes/java/awt/Button.java | 2 +- jdk/src/share/classes/java/awt/MenuItem.java | 2 +- .../awt/datatransfer/SystemFlavorMap.java | 4 +- .../classes/java/awt/image/BufferedImage.java | 6 +- .../text/DictionaryBasedBreakIterator.java | 6 +- .../classes/java/text/MessageFormat.java | 4 +- .../imageio/stream/ImageInputStreamImpl.java | 4 +- .../classes/javax/swing/AbstractButton.java | 12 ++-- .../javax/swing/DebugGraphicsInfo.java | 2 +- .../classes/javax/swing/JInternalFrame.java | 8 +-- .../classes/javax/swing/JOptionPane.java | 2 +- .../classes/javax/swing/JProgressBar.java | 14 ++--- .../share/classes/javax/swing/JScrollBar.java | 14 ++--- .../share/classes/javax/swing/JSlider.java | 20 +++--- .../share/classes/javax/swing/JSplitPane.java | 6 +- .../classes/javax/swing/JTabbedPane.java | 2 +- jdk/src/share/classes/javax/swing/JTable.java | 8 +-- .../share/classes/javax/swing/JTextArea.java | 2 +- .../javax/swing/SpinnerNumberModel.java | 12 ++-- .../classes/javax/swing/TablePrintable.java | 2 +- .../javax/swing/plaf/basic/BasicButtonUI.java | 2 +- .../swing/plaf/basic/BasicLookAndFeel.java | 2 +- .../swing/plaf/basic/BasicMenuItemUI.java | 2 +- .../swing/plaf/basic/BasicOptionPaneUI.java | 6 +- .../swing/plaf/basic/BasicTabbedPaneUI.java | 4 +- .../swing/plaf/basic/BasicToolBarUI.java | 2 +- .../swing/plaf/metal/MetalLookAndFeel.java | 6 +- .../swing/plaf/synth/SynthArrowButton.java | 2 +- .../swing/plaf/synth/SynthDesktopPaneUI.java | 2 +- .../swing/plaf/synth/SynthSplitPaneUI.java | 2 +- .../javax/swing/table/TableColumn.java | 2 +- .../javax/swing/text/AbstractDocument.java | 4 +- .../javax/swing/text/NumberFormatter.java | 13 ++-- .../javax/swing/text/PlainDocument.java | 2 +- .../classes/javax/swing/text/Segment.java | 2 +- .../javax/swing/text/StyleConstants.java | 6 +- .../javax/swing/text/html/AccessibleHTML.java | 8 +-- .../classes/javax/swing/text/html/CSS.java | 2 +- .../javax/swing/text/html/HTMLEditorKit.java | 4 +- .../swing/text/html/parser/AttributeList.java | 14 ++--- .../javax/swing/text/html/parser/DTD.java | 4 +- .../javax/swing/text/html/parser/Element.java | 8 +-- .../javax/swing/text/html/parser/Entity.java | 18 +++--- .../javax/swing/text/html/parser/Parser.java | 2 +- .../javax/swing/text/rtf/RTFAttributes.java | 6 +- .../javax/swing/text/rtf/RTFGenerator.java | 14 +---- .../swing/tree/DefaultTreeSelectionModel.java | 4 +- .../share/classes/sun/applet/AppletPanel.java | 2 +- .../classes/sun/applet/AppletViewer.java | 4 +- .../classes/sun/awt/FontConfiguration.java | 2 +- .../classes/sun/awt/im/InputContext.java | 4 +- .../classes/sun/font/FileFontStrike.java | 4 +- .../share/classes/sun/font/FontManager.java | 2 +- .../share/classes/sun/font/FontResolver.java | 2 +- .../classes/sun/font/PhysicalStrike.java | 2 +- .../classes/sun/java2d/SunGraphics2D.java | 2 +- .../classes/sun/java2d/loops/SurfaceType.java | 2 +- .../share/classes/sun/print/PSPrinterJob.java | 18 +++--- .../classes/sun/print/RasterPrinterJob.java | 2 +- .../sun/text/normalizer/VersionInfo.java | 2 +- .../sun/awt/X11/XDropTargetProtocol.java | 2 +- .../sun/awt/X11/XDropTargetRegistry.java | 2 +- .../sun/awt/X11/XEmbedServerTester.java | 4 +- .../classes/sun/awt/X11/XFileDialogPeer.java | 2 +- .../classes/sun/awt/X11/XScrollbar.java | 8 +-- .../classes/sun/awt/X11GraphicsConfig.java | 2 +- .../classes/sun/awt/X11GraphicsDevice.java | 6 +- .../classes/sun/print/UnixPrintJob.java | 21 +++---- .../sun/awt/windows/WDataTransferer.java | 2 +- .../classes/sun/awt/windows/WInputMethod.java | 2 +- .../classes/sun/awt/windows/WWindowPeer.java | 2 +- .../classes/sun/print/Win32PrintService.java | 8 +-- 80 files changed, 268 insertions(+), 276 deletions(-) diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java index b41450257a0..ae2bcb56a20 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFImageReader.java @@ -504,7 +504,7 @@ public class GIFImageReader extends ImageReader { } // Found position of metadata for image 0 - imageStartPosition.add(new Long(stream.getStreamPosition())); + imageStartPosition.add(Long.valueOf(stream.getStreamPosition())); } catch (IOException e) { throw new IIOException("I/O error reading header!", e); } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java index 66d647f6856..58d819f11ea 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java @@ -98,7 +98,7 @@ class GIFWritableImageMetadata extends GIFImageMetadata { try { return data.getBytes("ISO-8859-1"); } catch (UnsupportedEncodingException e) { - return (new String("")).getBytes(); + return "".getBytes(); } } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java index f5b671e7cd4..ba1c8da7958 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java @@ -328,7 +328,7 @@ class GTKColorChooserPanel extends AbstractColorChooserPanel implements setHSB(hue, saturation, brightness); if (update) { settingColor = true; - hueSpinner.setValue(new Integer((int)(hue * 360))); + hueSpinner.setValue(Integer.valueOf((int)(hue * 360))); settingColor = false; } } @@ -376,8 +376,8 @@ class GTKColorChooserPanel extends AbstractColorChooserPanel implements setHSB(hue, s, b); if (update) { settingColor = true; - saturationSpinner.setValue(new Integer((int)(s * 255))); - valueSpinner.setValue(new Integer((int)(b * 255))); + saturationSpinner.setValue(Integer.valueOf((int)(s * 255))); + valueSpinner.setValue(Integer.valueOf((int)(b * 255))); settingColor = false; } } @@ -391,9 +391,9 @@ class GTKColorChooserPanel extends AbstractColorChooserPanel implements setColor(color, false, true, true); settingColor = true; - hueSpinner.setValue(new Integer((int)(hue * 360))); - saturationSpinner.setValue(new Integer((int)(saturation * 255))); - valueSpinner.setValue(new Integer((int)(brightness * 255))); + hueSpinner.setValue(Integer.valueOf((int)(hue * 360))); + saturationSpinner.setValue(Integer.valueOf((int)(saturation * 255))); + valueSpinner.setValue(Integer.valueOf((int)(brightness * 255))); settingColor = false; } @@ -409,9 +409,9 @@ class GTKColorChooserPanel extends AbstractColorChooserPanel implements setColor(color, false, false, true); settingColor = true; - redSpinner.setValue(new Integer(color.getRed())); - greenSpinner.setValue(new Integer(color.getGreen())); - blueSpinner.setValue(new Integer(color.getBlue())); + redSpinner.setValue(Integer.valueOf(color.getRed())); + greenSpinner.setValue(Integer.valueOf(color.getGreen())); + blueSpinner.setValue(Integer.valueOf(color.getBlue())); settingColor = false; } @@ -454,13 +454,13 @@ class GTKColorChooserPanel extends AbstractColorChooserPanel implements colorNameTF.setText("#" + hexString.substring(1)); if (updateSpinners) { - redSpinner.setValue(new Integer(color.getRed())); - greenSpinner.setValue(new Integer(color.getGreen())); - blueSpinner.setValue(new Integer(color.getBlue())); + redSpinner.setValue(Integer.valueOf(color.getRed())); + greenSpinner.setValue(Integer.valueOf(color.getGreen())); + blueSpinner.setValue(Integer.valueOf(color.getBlue())); - hueSpinner.setValue(new Integer((int)(hue * 360))); - saturationSpinner.setValue(new Integer((int)(saturation * 255))); - valueSpinner.setValue(new Integer((int)(brightness * 255))); + hueSpinner.setValue(Integer.valueOf((int)(hue * 360))); + saturationSpinner.setValue(Integer.valueOf((int)(saturation * 255))); + valueSpinner.setValue(Integer.valueOf((int)(brightness * 255))); } settingColor = false; } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java index b4f435798a1..3c565604174 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java @@ -336,7 +336,7 @@ public class GTKLookAndFeel extends SynthLookAndFeel { // populate the table with the values from basic. super.initComponentDefaults(table); - Integer zero = new Integer(0); + Integer zero = Integer.valueOf(0); Object zeroBorder = new sun.swing.SwingLazyValue( "javax.swing.plaf.BorderUIResource$EmptyBorderUIResource", new Object[] {zero, zero, zero, zero}); @@ -371,7 +371,7 @@ public class GTKLookAndFeel extends SynthLookAndFeel { int vProgWidth = 22 - (progXThickness * 2); int vProgHeight = 80 - (progYThickness * 2); - Integer caretBlinkRate = new Integer(500); + Integer caretBlinkRate = Integer.valueOf(500); Insets zeroInsets = new InsetsUIResource(0, 0, 0, 0); Double defaultCaretAspectRatio = new Double(0.025); @@ -540,7 +540,7 @@ public class GTKLookAndFeel extends SynthLookAndFeel { } Object[] defaults = new Object[] { - "ArrowButton.size", new Integer(13), + "ArrowButton.size", Integer.valueOf(13), "Button.defaultButtonFollowsFocus", Boolean.FALSE, @@ -893,8 +893,8 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "ScrollBar.squareButtons", Boolean.FALSE, - "ScrollBar.thumbHeight", new Integer(14), - "ScrollBar.width", new Integer(16), + "ScrollBar.thumbHeight", Integer.valueOf(14), + "ScrollBar.width", Integer.valueOf(16), "ScrollBar.minimumThumbSize", new Dimension(8, 8), "ScrollBar.maximumThumbSize", new Dimension(4096, 4096), "ScrollBar.allowsAbsolutePositioning", Boolean.TRUE, @@ -954,12 +954,12 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "Separator.insets", zeroInsets, - "Separator.thickness", new Integer(2), + "Separator.thickness", Integer.valueOf(2), "Slider.paintValue", Boolean.TRUE, - "Slider.thumbWidth", new Integer(30), - "Slider.thumbHeight", new Integer(14), + "Slider.thumbWidth", Integer.valueOf(30), + "Slider.thumbHeight", Integer.valueOf(14), "Slider.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { "RIGHT", "positiveUnitIncrement", @@ -1013,9 +1013,9 @@ public class GTKLookAndFeel extends SynthLookAndFeel { }), - "SplitPane.size", new Integer(7), - "SplitPane.oneTouchOffset", new Integer(2), - "SplitPane.oneTouchButtonSize", new Integer(5), + "SplitPane.size", Integer.valueOf(7), + "SplitPane.oneTouchOffset", Integer.valueOf(2), + "SplitPane.oneTouchButtonSize", Integer.valueOf(5), "SplitPane.supportsOneTouchButtons", Boolean.FALSE, @@ -1223,13 +1223,13 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "ToolTip.font", new FontLazyValue(Region.TOOL_TIP), - "Tree.padding", new Integer(4), + "Tree.padding", Integer.valueOf(4), "Tree.background", tableBg, "Tree.drawHorizontalLines", Boolean.FALSE, "Tree.drawVerticalLines", Boolean.FALSE, - "Tree.rowHeight", new Integer(-1), + "Tree.rowHeight", Integer.valueOf(-1), "Tree.scrollsOnExpand", Boolean.FALSE, - "Tree.expanderSize", new Integer(10), + "Tree.expanderSize", Integer.valueOf(10), "Tree.repaintWholeRow", Boolean.TRUE, "Tree.closedIcon", null, "Tree.leafIcon", null, @@ -1240,8 +1240,8 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "Tree.collapsedIcon", new GTKStyle.GTKLazyValue( "com.sun.java.swing.plaf.gtk.GTKIconFactory", "getTreeCollapsedIcon"), - "Tree.leftChildIndent", new Integer(2), - "Tree.rightChildIndent", new Integer(12), + "Tree.leftChildIndent", Integer.valueOf(2), + "Tree.rightChildIndent", Integer.valueOf(12), "Tree.scrollsHorizontallyAndVertically", Boolean.FALSE, "Tree.drawsFocusBorder", Boolean.TRUE, "Tree.focusInputMap", diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java index 0d008907248..4f6e42c784c 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java @@ -851,7 +851,7 @@ class GTKStyle extends SynthStyle implements GTKConstants { int focusLineWidth = getClassSpecificIntValue(context, "focus-line-width", 0); if (value == null && focusLineWidth > 0) { - value = new Integer(16 + 2 * focusLineWidth); + value = Integer.valueOf(16 + 2 * focusLineWidth); } } return value; @@ -975,12 +975,12 @@ class GTKStyle extends SynthStyle implements GTKConstants { private static void initIconTypeMap() { ICON_TYPE_MAP = new HashMap(); - ICON_TYPE_MAP.put("gtk-menu", new Integer(1)); - ICON_TYPE_MAP.put("gtk-small-toolbar", new Integer(2)); - ICON_TYPE_MAP.put("gtk-large-toolbar", new Integer(3)); - ICON_TYPE_MAP.put("gtk-button", new Integer(4)); - ICON_TYPE_MAP.put("gtk-dnd", new Integer(5)); - ICON_TYPE_MAP.put("gtk-dialog", new Integer(6)); + ICON_TYPE_MAP.put("gtk-menu", Integer.valueOf(1)); + ICON_TYPE_MAP.put("gtk-small-toolbar", Integer.valueOf(2)); + ICON_TYPE_MAP.put("gtk-large-toolbar", Integer.valueOf(3)); + ICON_TYPE_MAP.put("gtk-button", Integer.valueOf(4)); + ICON_TYPE_MAP.put("gtk-dnd", Integer.valueOf(5)); + ICON_TYPE_MAP.put("gtk-dialog", Integer.valueOf(6)); } } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java index 274ac510c0b..e6117989134 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java @@ -178,7 +178,7 @@ class Metacity implements SynthConstants { name = child.getNodeName(); Object value = null; if ("distance".equals(name)) { - value = new Integer(getIntAttr(child, "value", 0)); + value = Integer.valueOf(getIntAttr(child, "value", 0)); } else if ("border".equals(name)) { value = new Insets(getIntAttr(child, "top", 0), getIntAttr(child, "left", 0), @@ -808,7 +808,7 @@ class Metacity implements SynthConstants { protected void setFrameGeometry(JComponent titlePane, Map gm) { this.frameGeometry = gm; if (getInt("top_height") == 0 && titlePane != null) { - gm.put("top_height", new Integer(titlePane.getHeight())); + gm.put("top_height", Integer.valueOf(titlePane.getHeight())); } } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java index 63994ff6732..995d195c34f 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java @@ -567,7 +567,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel "ProgressBar.selectionBackground", table.get("controlText"), "ProgressBar.border", loweredBevelBorder, "ProgressBar.cellLength", new Integer(6), - "ProgressBar.cellSpacing", new Integer(0), + "ProgressBar.cellSpacing", Integer.valueOf(0), // Buttons "Button.margin", new InsetsUIResource(2, 4, 2, 4), @@ -859,7 +859,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel "SplitPane.background", table.get("control"), "SplitPane.highlight", table.get("controlHighlight"), "SplitPane.shadow", table.get("controlShadow"), - "SplitPane.dividerSize", new Integer(20), + "SplitPane.dividerSize", Integer.valueOf(20), "SplitPane.activeThumb", table.get("activeCaptionBorder"), "SplitPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { @@ -1160,7 +1160,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel }), "TextField.caretForeground", black, - "TextField.caretBlinkRate", new Integer(500), + "TextField.caretBlinkRate", Integer.valueOf(500), "TextField.inactiveForeground", table.get("textInactiveText"), "TextField.selectionBackground", table.get("textHighlight"), "TextField.selectionForeground", table.get("textHighlightText"), @@ -1171,7 +1171,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel "TextField.focusInputMap", fieldInputMap, "PasswordField.caretForeground", black, - "PasswordField.caretBlinkRate", new Integer(500), + "PasswordField.caretBlinkRate", Integer.valueOf(500), "PasswordField.inactiveForeground", table.get("textInactiveText"), "PasswordField.selectionBackground", table.get("textHighlight"), "PasswordField.selectionForeground", table.get("textHighlightText"), @@ -1182,7 +1182,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel "PasswordField.focusInputMap", passwordInputMap, "TextArea.caretForeground", black, - "TextArea.caretBlinkRate", new Integer(500), + "TextArea.caretBlinkRate", Integer.valueOf(500), "TextArea.inactiveForeground", table.get("textInactiveText"), "TextArea.selectionBackground", table.get("textHighlight"), "TextArea.selectionForeground", table.get("textHighlightText"), @@ -1193,7 +1193,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel "TextArea.focusInputMap", multilineInputMap, "TextPane.caretForeground", black, - "TextPane.caretBlinkRate", new Integer(500), + "TextPane.caretBlinkRate", Integer.valueOf(500), "TextPane.inactiveForeground", table.get("textInactiveText"), "TextPane.selectionBackground", lightGray, "TextPane.selectionForeground", table.get("textHighlightText"), @@ -1204,7 +1204,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel "TextPane.focusInputMap", multilineInputMap, "EditorPane.caretForeground", red, - "EditorPane.caretBlinkRate", new Integer(500), + "EditorPane.caretBlinkRate", Integer.valueOf(500), "EditorPane.inactiveForeground", table.get("textInactiveText"), "EditorPane.selectionBackground", lightGray, "EditorPane.selectionForeground", table.get("textHighlightText"), diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java index 3977b4d1de6..9af41fc39c8 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java @@ -299,9 +299,9 @@ public class WindowsLookAndFeel extends BasicLookAndFeel initResourceBundle(table); // *** Shared Fonts - Integer twelve = new Integer(12); - Integer fontPlain = new Integer(Font.PLAIN); - Integer fontBold = new Integer(Font.BOLD); + Integer twelve = Integer.valueOf(12); + Integer fontPlain = Integer.valueOf(Font.PLAIN); + Integer fontBold = Integer.valueOf(Font.BOLD); Object dialogPlain12 = new SwingLazyValue( "javax.swing.plaf.FontUIResource", @@ -522,19 +522,19 @@ public class WindowsLookAndFeel extends BasicLookAndFeel toolkit); Object WindowBorderWidth = new DesktopProperty( "win.frame.sizingBorderWidth", - new Integer(1), + Integer.valueOf(1), toolkit); Object TitlePaneHeight = new DesktopProperty( "win.frame.captionHeight", - new Integer(18), + Integer.valueOf(18), toolkit); Object TitleButtonWidth = new DesktopProperty( "win.frame.captionButtonWidth", - new Integer(16), + Integer.valueOf(16), toolkit); Object TitleButtonHeight = new DesktopProperty( "win.frame.captionButtonHeight", - new Integer(16), + Integer.valueOf(16), toolkit); Object InactiveTextColor = new DesktopProperty( "win.text.grayedTextColor", @@ -567,7 +567,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel Object IconFont = ControlFont; Object scrollBarWidth = new DesktopProperty("win.scrollbar.width", - new Integer(16), toolkit); + Integer.valueOf(16), toolkit); Object menuBarHeight = new DesktopProperty("win.menu.height", null, toolkit); @@ -673,12 +673,12 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "Button.disabledForeground", InactiveTextColor, "Button.disabledShadow", ControlHighlightColor, "Button.focus", black, - "Button.dashedRectGapX", new XPValue(new Integer(3), new Integer(5)), - "Button.dashedRectGapY", new XPValue(new Integer(3), new Integer(4)), - "Button.dashedRectGapWidth", new XPValue(new Integer(6), new Integer(10)), - "Button.dashedRectGapHeight", new XPValue(new Integer(6), new Integer(8)), - "Button.textShiftOffset", new XPValue(new Integer(0), - new Integer(1)), + "Button.dashedRectGapX", new XPValue(Integer.valueOf(3), Integer.valueOf(5)), + "Button.dashedRectGapY", new XPValue(Integer.valueOf(3), Integer.valueOf(4)), + "Button.dashedRectGapWidth", new XPValue(Integer.valueOf(6), Integer.valueOf(10)), + "Button.dashedRectGapHeight", new XPValue(Integer.valueOf(6), Integer.valueOf(8)), + "Button.textShiftOffset", new XPValue(Integer.valueOf(0), + Integer.valueOf(1)), // W2K keyboard navigation hidding. "Button.showMnemonics", showMnemonics, "Button.focusInputMap", @@ -780,7 +780,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel }), // DesktopIcon - "DesktopIcon.width", new Integer(160), + "DesktopIcon.width", Integer.valueOf(160), "EditorPane.font", ControlFont, "EditorPane.background", WindowBackgroundColor, @@ -814,9 +814,9 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "icons/NewFolder.gif"), "FileChooser.useSystemExtensionHiding", Boolean.TRUE, - "FileChooser.lookInLabelMnemonic", new Integer(KeyEvent.VK_I), - "FileChooser.fileNameLabelMnemonic", new Integer(KeyEvent.VK_N), - "FileChooser.filesOfTypeLabelMnemonic", new Integer(KeyEvent.VK_T), + "FileChooser.lookInLabelMnemonic", Integer.valueOf(KeyEvent.VK_I), + "FileChooser.fileNameLabelMnemonic", Integer.valueOf(KeyEvent.VK_N), + "FileChooser.filesOfTypeLabelMnemonic", Integer.valueOf(KeyEvent.VK_T), "FileChooser.usesSingleFilePane", Boolean.TRUE, "FileChooser.noPlacesBar", new DesktopProperty("win.comdlg.noPlacesBar", Boolean.FALSE, toolkit), @@ -1021,10 +1021,10 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "Menu.selectionBackground", SelectionBackgroundColor, "Menu.acceleratorForeground", MenuTextColor, "Menu.acceleratorSelectionForeground", SelectionTextColor, - "Menu.menuPopupOffsetX", new Integer(0), - "Menu.menuPopupOffsetY", new Integer(0), - "Menu.submenuPopupOffsetX", new Integer(-4), - "Menu.submenuPopupOffsetY", new Integer(-3), + "Menu.menuPopupOffsetX", Integer.valueOf(0), + "Menu.menuPopupOffsetY", Integer.valueOf(0), + "Menu.submenuPopupOffsetX", Integer.valueOf(-4), + "Menu.submenuPopupOffsetY", Integer.valueOf(-3), "Menu.crossMenuMnemonic", Boolean.FALSE, "Menu.preserveTopLevelSelection", Boolean.TRUE, @@ -1184,8 +1184,8 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "ProgressBar.highlight", ControlHighlightColor, "ProgressBar.selectionForeground", ControlBackgroundColor, "ProgressBar.selectionBackground", SelectionBackgroundColor, - "ProgressBar.cellLength", new Integer(7), - "ProgressBar.cellSpacing", new Integer(2), + "ProgressBar.cellLength", Integer.valueOf(7), + "ProgressBar.cellSpacing", Integer.valueOf(2), "ProgressBar.indeterminateInsets", new Insets(3, 3, 3, 3), // *** RootPane. @@ -1292,7 +1292,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "SplitPane.highlight", ControlHighlightColor, "SplitPane.shadow", ControlShadowColor, "SplitPane.darkShadow", ControlDarkShadowColor, - "SplitPane.dividerSize", new Integer(5), + "SplitPane.dividerSize", Integer.valueOf(5), "SplitPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { "UP", "negativeIncrement", @@ -1496,7 +1496,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "ToggleButton.light", ControlLightColor, "ToggleButton.highlight", ControlHighlightColor, "ToggleButton.focus", ControlTextColor, - "ToggleButton.textShiftOffset", new Integer(1), + "ToggleButton.textShiftOffset", Integer.valueOf(1), "ToggleButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { "SPACE", "pressed", @@ -1548,8 +1548,8 @@ public class WindowsLookAndFeel extends BasicLookAndFeel "Tree.background", WindowBackgroundColor, "Tree.foreground", WindowTextColor, "Tree.hash", gray, - "Tree.leftChildIndent", new Integer(8), - "Tree.rightChildIndent", new Integer(11), + "Tree.leftChildIndent", Integer.valueOf(8), + "Tree.rightChildIndent", Integer.valueOf(11), "Tree.textForeground", WindowTextColor, "Tree.textBackground", WindowBackgroundColor, "Tree.selectionForeground", SelectionTextColor, @@ -2488,18 +2488,18 @@ public class WindowsLookAndFeel extends BasicLookAndFeel private int direction; XPDLUValue(int xpdlu, int classicdlu, int direction) { - super(new Integer(xpdlu), new Integer(classicdlu)); + super(Integer.valueOf(xpdlu), Integer.valueOf(classicdlu)); this.direction = direction; } public Object getXPValue(UIDefaults table) { int px = dluToPixels(((Integer)xpValue).intValue(), direction); - return new Integer(px); + return Integer.valueOf(px); } public Object getClassicValue(UIDefaults table) { int px = dluToPixels(((Integer)classicValue).intValue(), direction); - return new Integer(px); + return Integer.valueOf(px); } } diff --git a/jdk/src/share/classes/java/awt/Button.java b/jdk/src/share/classes/java/awt/Button.java index 46d0d072424..fcb33ddecc2 100644 --- a/jdk/src/share/classes/java/awt/Button.java +++ b/jdk/src/share/classes/java/awt/Button.java @@ -597,7 +597,7 @@ public class Button extends Component implements Accessible { public String getAccessibleActionDescription(int i) { if (i == 0) { // [[[PENDING: WDW -- need to provide a localized string]]] - return new String("click"); + return "click"; } else { return null; } diff --git a/jdk/src/share/classes/java/awt/MenuItem.java b/jdk/src/share/classes/java/awt/MenuItem.java index 899cab485ee..54756b8f488 100644 --- a/jdk/src/share/classes/java/awt/MenuItem.java +++ b/jdk/src/share/classes/java/awt/MenuItem.java @@ -847,7 +847,7 @@ public class MenuItem extends MenuComponent implements Accessible { public String getAccessibleActionDescription(int i) { if (i == 0) { // [[[PENDING: WDW -- need to provide a localized string]]] - return new String("click"); + return "click"; } else { return null; } diff --git a/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java b/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java index 77eb2bcec61..57936eb6045 100644 --- a/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java +++ b/jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java @@ -298,7 +298,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable { while (continueLine(line)) { String nextLine = in.readLine(); if (nextLine == null) { - nextLine = new String(""); + nextLine = ""; } String loppedLine = line.substring(0, line.length() - 1); @@ -313,7 +313,7 @@ public final class SystemFlavorMap implements FlavorMap, FlavorTable { } nextLine = nextLine.substring(startIndex, nextLine.length()); - line = new String(loppedLine+nextLine); + line = loppedLine+nextLine; } // Find start of key diff --git a/jdk/src/share/classes/java/awt/image/BufferedImage.java b/jdk/src/share/classes/java/awt/image/BufferedImage.java index 763fc31df69..e5b77bec510 100644 --- a/jdk/src/share/classes/java/awt/image/BufferedImage.java +++ b/jdk/src/share/classes/java/awt/image/BufferedImage.java @@ -1210,9 +1210,9 @@ public class BufferedImage extends java.awt.Image * BufferedImage. */ public String toString() { - return new String("BufferedImage@"+Integer.toHexString(hashCode()) - +": type = "+imageType - +" "+colorModel+" "+raster); + return "BufferedImage@"+Integer.toHexString(hashCode()) + +": type = "+imageType + +" "+colorModel+" "+raster; } /** diff --git a/jdk/src/share/classes/java/text/DictionaryBasedBreakIterator.java b/jdk/src/share/classes/java/text/DictionaryBasedBreakIterator.java index 4a598155496..dac78aeda4b 100644 --- a/jdk/src/share/classes/java/text/DictionaryBasedBreakIterator.java +++ b/jdk/src/share/classes/java/text/DictionaryBasedBreakIterator.java @@ -384,7 +384,7 @@ class DictionaryBasedBreakIterator extends RuleBasedBreakIterator { // on the last character of a legal word. Push that position onto // the possible-break-positions stack if (dictionary.getNextState(state, 0) == -1) { - possibleBreakPositions.push(new Integer(text.getIndex())); + possibleBreakPositions.push(Integer.valueOf(text.getIndex())); } // look up the new state to transition to in the dictionary @@ -395,7 +395,7 @@ class DictionaryBasedBreakIterator extends RuleBasedBreakIterator { // and we've successfully traversed the whole range. Drop out // of the loop. if (state == -1) { - currentBreakPositions.push(new Integer(text.getIndex())); + currentBreakPositions.push(Integer.valueOf(text.getIndex())); break; } @@ -496,7 +496,7 @@ class DictionaryBasedBreakIterator extends RuleBasedBreakIterator { if (!currentBreakPositions.isEmpty()) { currentBreakPositions.pop(); } - currentBreakPositions.push(new Integer(endPos)); + currentBreakPositions.push(Integer.valueOf(endPos)); // create a regular array to hold the break positions and copy // the break positions from the stack to the array (in addition, diff --git a/jdk/src/share/classes/java/text/MessageFormat.java b/jdk/src/share/classes/java/text/MessageFormat.java index b16fefe646e..7f3db05402b 100644 --- a/jdk/src/share/classes/java/text/MessageFormat.java +++ b/jdk/src/share/classes/java/text/MessageFormat.java @@ -1286,7 +1286,7 @@ public class MessageFormat extends Format { characterIterators.add( createAttributedCharacterIterator( subIterator, Field.ARGUMENT, - new Integer(argumentNumber))); + Integer.valueOf(argumentNumber))); last = result.length(); } arg = null; @@ -1296,7 +1296,7 @@ public class MessageFormat extends Format { characterIterators.add( createAttributedCharacterIterator( arg, Field.ARGUMENT, - new Integer(argumentNumber))); + Integer.valueOf(argumentNumber))); last = result.length(); } } diff --git a/jdk/src/share/classes/javax/imageio/stream/ImageInputStreamImpl.java b/jdk/src/share/classes/javax/imageio/stream/ImageInputStreamImpl.java index b6a146c3dfd..a43578f8c66 100644 --- a/jdk/src/share/classes/javax/imageio/stream/ImageInputStreamImpl.java +++ b/jdk/src/share/classes/javax/imageio/stream/ImageInputStreamImpl.java @@ -778,8 +778,8 @@ public abstract class ImageInputStreamImpl implements ImageInputStream { */ public void mark() { try { - markByteStack.push(new Long(getStreamPosition())); - markBitStack.push(new Integer(getBitOffset())); + markByteStack.push(Long.valueOf(getStreamPosition())); + markBitStack.push(Integer.valueOf(getBitOffset())); } catch (IOException e) { } } diff --git a/jdk/src/share/classes/javax/swing/AbstractButton.java b/jdk/src/share/classes/javax/swing/AbstractButton.java index b4d4ae1e29a..6522cef8315 100644 --- a/jdk/src/share/classes/javax/swing/AbstractButton.java +++ b/jdk/src/share/classes/javax/swing/AbstractButton.java @@ -2047,14 +2047,14 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl null, AccessibleState.SELECTED); accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, - new Integer(0), new Integer(1)); + Integer.valueOf(0), Integer.valueOf(1)); } else { accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.SELECTED, null); accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, - new Integer(1), new Integer(0)); + Integer.valueOf(1), Integer.valueOf(0)); } } } @@ -2552,9 +2552,9 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl */ public Number getCurrentAccessibleValue() { if (isSelected()) { - return new Integer(1); + return Integer.valueOf(1); } else { - return new Integer(0); + return Integer.valueOf(0); } } @@ -2583,7 +2583,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl * @return an Integer of 0. */ public Number getMinimumAccessibleValue() { - return new Integer(0); + return Integer.valueOf(0); } /** @@ -2592,7 +2592,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl * @return An Integer of 1. */ public Number getMaximumAccessibleValue() { - return new Integer(1); + return Integer.valueOf(1); } diff --git a/jdk/src/share/classes/javax/swing/DebugGraphicsInfo.java b/jdk/src/share/classes/javax/swing/DebugGraphicsInfo.java index 72bf9445bd0..635be42475e 100644 --- a/jdk/src/share/classes/javax/swing/DebugGraphicsInfo.java +++ b/jdk/src/share/classes/javax/swing/DebugGraphicsInfo.java @@ -49,7 +49,7 @@ class DebugGraphicsInfo { componentToDebug = new Hashtable(); } if (debug > 0) { - componentToDebug.put(component, new Integer(debug)); + componentToDebug.put(component, Integer.valueOf(debug)); } else { componentToDebug.remove(component); } diff --git a/jdk/src/share/classes/javax/swing/JInternalFrame.java b/jdk/src/share/classes/javax/swing/JInternalFrame.java index cc8480fc455..67d39b0cbb7 100644 --- a/jdk/src/share/classes/javax/swing/JInternalFrame.java +++ b/jdk/src/share/classes/javax/swing/JInternalFrame.java @@ -1285,7 +1285,7 @@ public class JInternalFrame extends JComponent implements * description: Specifies what desktop layer is used. */ public void setLayer(int layer) { - this.setLayer(new Integer(layer)); + this.setLayer(Integer.valueOf(layer)); } /** @@ -2092,7 +2092,7 @@ public class JInternalFrame extends JComponent implements * have a value */ public Number getCurrentAccessibleValue() { - return new Integer(getLayer()); + return Integer.valueOf(getLayer()); } /** @@ -2116,7 +2116,7 @@ public class JInternalFrame extends JComponent implements * have a minimum value */ public Number getMinimumAccessibleValue() { - return new Integer(Integer.MIN_VALUE); + return Integer.MIN_VALUE; } /** @@ -2126,7 +2126,7 @@ public class JInternalFrame extends JComponent implements * have a maximum value */ public Number getMaximumAccessibleValue() { - return new Integer(Integer.MAX_VALUE); + return Integer.MAX_VALUE; } } // AccessibleJInternalFrame diff --git a/jdk/src/share/classes/javax/swing/JOptionPane.java b/jdk/src/share/classes/javax/swing/JOptionPane.java index 0591f3dface..130d9f666a0 100644 --- a/jdk/src/share/classes/javax/swing/JOptionPane.java +++ b/jdk/src/share/classes/javax/swing/JOptionPane.java @@ -1512,7 +1512,7 @@ public class JOptionPane extends JComponent implements Accessible iFrame.putClientProperty("JInternalFrame.frameType", "optionDialog"); iFrame.putClientProperty("JInternalFrame.messageType", - new Integer(getMessageType())); + Integer.valueOf(getMessageType())); iFrame.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameClosing(InternalFrameEvent e) { diff --git a/jdk/src/share/classes/javax/swing/JProgressBar.java b/jdk/src/share/classes/javax/swing/JProgressBar.java index 337f5b118ef..68a6322c39a 100644 --- a/jdk/src/share/classes/javax/swing/JProgressBar.java +++ b/jdk/src/share/classes/javax/swing/JProgressBar.java @@ -775,9 +775,9 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, (oldModel== null - ? null : new Integer(oldModel.getValue())), + ? null : Integer.valueOf(oldModel.getValue())), (newModel== null - ? null : new Integer(newModel.getValue()))); + ? null : Integer.valueOf(newModel.getValue()))); } if (model != null) { @@ -850,8 +850,8 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib if (accessibleContext != null) { accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, - new Integer(oldValue), - new Integer(brm.getValue())); + Integer.valueOf(oldValue), + Integer.valueOf(brm.getValue())); } } @@ -1087,7 +1087,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib * @return the current value of this object */ public Number getCurrentAccessibleValue() { - return new Integer(getValue()); + return Integer.valueOf(getValue()); } /** @@ -1110,7 +1110,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib * @return the minimum value of this object */ public Number getMinimumAccessibleValue() { - return new Integer(getMinimum()); + return Integer.valueOf(getMinimum()); } /** @@ -1120,7 +1120,7 @@ public class JProgressBar extends JComponent implements SwingConstants, Accessib */ public Number getMaximumAccessibleValue() { // TIGER - 4422362 - return new Integer(model.getMaximum() - model.getExtent()); + return Integer.valueOf(model.getMaximum() - model.getExtent()); } } // AccessibleJProgressBar diff --git a/jdk/src/share/classes/javax/swing/JScrollBar.java b/jdk/src/share/classes/javax/swing/JScrollBar.java index 0b646ac90b2..2136fe62975 100644 --- a/jdk/src/share/classes/javax/swing/JScrollBar.java +++ b/jdk/src/share/classes/javax/swing/JScrollBar.java @@ -314,7 +314,7 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible BoundedRangeModel oldModel = model; if (model != null) { model.removeChangeListener(fwdAdjustmentEvents); - oldValue = new Integer(model.getValue()); + oldValue = Integer.valueOf(model.getValue()); } model = newModel; if (model != null) { @@ -465,8 +465,8 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible if (accessibleContext != null) { accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, - new Integer(oldValue), - new Integer(m.getValue())); + Integer.valueOf(oldValue), + Integer.valueOf(m.getValue())); } } @@ -611,8 +611,8 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible if (accessibleContext != null) { accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, - new Integer(oldValue), - new Integer(m.getValue())); + Integer.valueOf(oldValue), + Integer.valueOf(m.getValue())); } } @@ -880,7 +880,7 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible * @return The current value of this object. */ public Number getCurrentAccessibleValue() { - return new Integer(getValue()); + return Integer.valueOf(getValue()); } /** @@ -903,7 +903,7 @@ public class JScrollBar extends JComponent implements Adjustable, Accessible * @return The minimum value of this object. */ public Number getMinimumAccessibleValue() { - return new Integer(getMinimum()); + return Integer.valueOf(getMinimum()); } /** diff --git a/jdk/src/share/classes/javax/swing/JSlider.java b/jdk/src/share/classes/javax/swing/JSlider.java index 7a9c4439f24..e1a7909b073 100644 --- a/jdk/src/share/classes/javax/swing/JSlider.java +++ b/jdk/src/share/classes/javax/swing/JSlider.java @@ -485,9 +485,9 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, (oldModel == null - ? null : new Integer(oldModel.getValue())), + ? null : Integer.valueOf(oldModel.getValue())), (newModel == null - ? null : new Integer(newModel.getValue()))); + ? null : Integer.valueOf(newModel.getValue()))); } } @@ -538,8 +538,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { if (accessibleContext != null) { accessibleContext.firePropertyChange( AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, - new Integer(oldValue), - new Integer(m.getValue())); + Integer.valueOf(oldValue), + Integer.valueOf(m.getValue())); } } @@ -581,7 +581,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { public void setMinimum(int minimum) { int oldMin = getModel().getMinimum(); getModel().setMinimum(minimum); - firePropertyChange( "minimum", new Integer( oldMin ), new Integer( minimum ) ); + firePropertyChange( "minimum", Integer.valueOf( oldMin ), Integer.valueOf( minimum ) ); } @@ -622,7 +622,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { public void setMaximum(int maximum) { int oldMax = getModel().getMaximum(); getModel().setMaximum(maximum); - firePropertyChange( "maximum", new Integer( oldMax ), new Integer( maximum ) ); + firePropertyChange( "maximum", Integer.valueOf( oldMax ), Integer.valueOf( maximum ) ); } @@ -989,7 +989,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { void createLabels() { for ( int labelIndex = start; labelIndex <= getMaximum(); labelIndex += increment ) { - put( new Integer( labelIndex ), new LabelUIResource( ""+labelIndex, JLabel.CENTER ) ); + put( Integer.valueOf( labelIndex ), new LabelUIResource( ""+labelIndex, JLabel.CENTER ) ); } } } @@ -1463,7 +1463,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { * @return The current value of this object. */ public Number getCurrentAccessibleValue() { - return new Integer(getValue()); + return Integer.valueOf(getValue()); } /** @@ -1486,7 +1486,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { * @return The minimum value of this object. */ public Number getMinimumAccessibleValue() { - return new Integer(getMinimum()); + return Integer.valueOf(getMinimum()); } /** @@ -1497,7 +1497,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible { public Number getMaximumAccessibleValue() { // TIGER - 4422362 BoundedRangeModel model = JSlider.this.getModel(); - return new Integer(model.getMaximum() - model.getExtent()); + return Integer.valueOf(model.getMaximum() - model.getExtent()); } } // AccessibleJSlider } diff --git a/jdk/src/share/classes/javax/swing/JSplitPane.java b/jdk/src/share/classes/javax/swing/JSplitPane.java index 22465c4805a..d96a7ee7445 100644 --- a/jdk/src/share/classes/javax/swing/JSplitPane.java +++ b/jdk/src/share/classes/javax/swing/JSplitPane.java @@ -1195,7 +1195,7 @@ public class JSplitPane extends JComponent implements Accessible * @return a localized String describing the value of this object */ public Number getCurrentAccessibleValue() { - return new Integer(getDividerLocation()); + return Integer.valueOf(getDividerLocation()); } @@ -1220,7 +1220,7 @@ public class JSplitPane extends JComponent implements Accessible * @return The minimum value of this object. */ public Number getMinimumAccessibleValue() { - return new Integer(getUI().getMinimumDividerLocation( + return Integer.valueOf(getUI().getMinimumDividerLocation( JSplitPane.this)); } @@ -1231,7 +1231,7 @@ public class JSplitPane extends JComponent implements Accessible * @return The maximum value of this object. */ public Number getMaximumAccessibleValue() { - return new Integer(getUI().getMaximumDividerLocation( + return Integer.valueOf(getUI().getMaximumDividerLocation( JSplitPane.this)); } diff --git a/jdk/src/share/classes/javax/swing/JTabbedPane.java b/jdk/src/share/classes/javax/swing/JTabbedPane.java index defffc711a4..fb058ccaed7 100644 --- a/jdk/src/share/classes/javax/swing/JTabbedPane.java +++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java @@ -967,7 +967,7 @@ public class JTabbedPane extends JComponent // currently no IndexPropertyChangeEvent. Once // IndexPropertyChangeEvents have been added this code should be // modified to use it. - putClientProperty("__index_to_remove__", new Integer(index)); + putClientProperty("__index_to_remove__", Integer.valueOf(index)); /* if the selected tab is after the removal */ if (selected > index) { diff --git a/jdk/src/share/classes/javax/swing/JTable.java b/jdk/src/share/classes/javax/swing/JTable.java index 562208939c9..62485a1c925 100644 --- a/jdk/src/share/classes/javax/swing/JTable.java +++ b/jdk/src/share/classes/javax/swing/JTable.java @@ -7680,7 +7680,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable */ public Accessible getAccessibleRowDescription(int r) { if (r < 0 || r >= getAccessibleRowCount()) { - throw new IllegalArgumentException(new Integer(r).toString()); + throw new IllegalArgumentException(Integer.toString(r)); } if (rowDescription == null) { return null; @@ -7698,7 +7698,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable */ public void setAccessibleRowDescription(int r, Accessible a) { if (r < 0 || r >= getAccessibleRowCount()) { - throw new IllegalArgumentException(new Integer(r).toString()); + throw new IllegalArgumentException(Integer.toString(r)); } if (rowDescription == null) { int numRows = getAccessibleRowCount(); @@ -7716,7 +7716,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable */ public Accessible getAccessibleColumnDescription(int c) { if (c < 0 || c >= getAccessibleColumnCount()) { - throw new IllegalArgumentException(new Integer(c).toString()); + throw new IllegalArgumentException(Integer.toString(c)); } if (columnDescription == null) { return null; @@ -7734,7 +7734,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable */ public void setAccessibleColumnDescription(int c, Accessible a) { if (c < 0 || c >= getAccessibleColumnCount()) { - throw new IllegalArgumentException(new Integer(c).toString()); + throw new IllegalArgumentException(Integer.toString(c)); } if (columnDescription == null) { int numColumns = getAccessibleColumnCount(); diff --git a/jdk/src/share/classes/javax/swing/JTextArea.java b/jdk/src/share/classes/javax/swing/JTextArea.java index 8f53daf2aca..18e3b45c35b 100644 --- a/jdk/src/share/classes/javax/swing/JTextArea.java +++ b/jdk/src/share/classes/javax/swing/JTextArea.java @@ -267,7 +267,7 @@ public class JTextArea extends JTextComponent { Document doc = getDocument(); if (doc != null) { int old = getTabSize(); - doc.putProperty(PlainDocument.tabSizeAttribute, new Integer(size)); + doc.putProperty(PlainDocument.tabSizeAttribute, Integer.valueOf(size)); firePropertyChange("tabSize", old, size); } } diff --git a/jdk/src/share/classes/javax/swing/SpinnerNumberModel.java b/jdk/src/share/classes/javax/swing/SpinnerNumberModel.java index e9b89b68ecf..fb8521b16f4 100644 --- a/jdk/src/share/classes/javax/swing/SpinnerNumberModel.java +++ b/jdk/src/share/classes/javax/swing/SpinnerNumberModel.java @@ -144,7 +144,7 @@ public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializ * minimum <= value <= maximum */ public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize) { - this(new Integer(value), new Integer(minimum), new Integer(maximum), new Integer(stepSize)); + this(Integer.valueOf(value), Integer.valueOf(minimum), Integer.valueOf(maximum), Integer.valueOf(stepSize)); } @@ -171,7 +171,7 @@ public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializ * stepSize equal to one, and an initial value of zero. */ public SpinnerNumberModel() { - this(new Integer(0), null, null, new Integer(1)); + this(Integer.valueOf(0), null, null, Integer.valueOf(1)); } @@ -333,16 +333,16 @@ public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializ long v = value.longValue() + (stepSize.longValue() * (long)dir); if (value instanceof Long) { - newValue = new Long(v); + newValue = Long.valueOf(v); } else if (value instanceof Integer) { - newValue = new Integer((int)v); + newValue = Integer.valueOf((int)v); } else if (value instanceof Short) { - newValue = new Short((short)v); + newValue = Short.valueOf((short)v); } else { - newValue = new Byte((byte)v); + newValue = Byte.valueOf((byte)v); } } diff --git a/jdk/src/share/classes/javax/swing/TablePrintable.java b/jdk/src/share/classes/javax/swing/TablePrintable.java index ffef3054735..864b550b3c8 100644 --- a/jdk/src/share/classes/javax/swing/TablePrintable.java +++ b/jdk/src/share/classes/javax/swing/TablePrintable.java @@ -215,7 +215,7 @@ class TablePrintable implements Printable { } // to pass the page number when formatting the header and footer text - Object[] pageNumber = new Object[]{new Integer(pageIndex + 1)}; + Object[] pageNumber = new Object[]{Integer.valueOf(pageIndex + 1)}; // fetch the formatted header text, if any String headerText = null; diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicButtonUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicButtonUI.java index fd3d84b2833..d6ad0643c1e 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicButtonUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicButtonUI.java @@ -109,7 +109,7 @@ public class BasicButtonUI extends ButtonUI{ LookAndFeel.installProperty(b, "rolloverEnabled", rollover); } - LookAndFeel.installProperty(b, "iconTextGap", new Integer(4)); + LookAndFeel.installProperty(b, "iconTextGap", Integer.valueOf(4)); } protected void installListeners(AbstractButton b) { diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java index 77f46be88c1..87ade48cd78 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java @@ -654,7 +654,7 @@ public abstract class BasicLookAndFeel extends LookAndFeel implements Serializab "javax.swing.plaf.basic.BasicIconFactory", "getRadioButtonMenuItemIcon"); - Object menuItemAcceleratorDelimiter = new String("+"); + Object menuItemAcceleratorDelimiter = "+"; // *** OptionPane value objects diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java index afe007aeb78..c56a1b49d39 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java @@ -146,7 +146,7 @@ public class BasicMenuItemUI extends MenuItemUI menuItem.setMargin(UIManager.getInsets(prefix + ".margin")); } - LookAndFeel.installProperty(menuItem, "iconTextGap", new Integer(4)); + LookAndFeel.installProperty(menuItem, "iconTextGap", Integer.valueOf(4)); defaultTextIconGap = menuItem.getIconTextGap(); LookAndFeel.installBorder(menuItem, prefix + ".border"); diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java index 86e458f3162..5ad6c2b92df 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java @@ -1195,10 +1195,10 @@ public class BasicOptionPaneUI extends OptionPaneUI { if (options == null) { if (optionType == JOptionPane.OK_CANCEL_OPTION && buttonIndex == 1) { - optionPane.setValue(new Integer(2)); + optionPane.setValue(Integer.valueOf(2)); } else { - optionPane.setValue(new Integer(buttonIndex)); + optionPane.setValue(Integer.valueOf(buttonIndex)); } } else { optionPane.setValue(options[buttonIndex]); @@ -1393,7 +1393,7 @@ public class BasicOptionPaneUI extends OptionPaneUI { if (getName() == CLOSE) { JOptionPane optionPane = (JOptionPane)e.getSource(); - optionPane.setValue(new Integer(JOptionPane.CLOSED_OPTION)); + optionPane.setValue(Integer.valueOf(JOptionPane.CLOSED_OPTION)); } } } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java index 3afdc74d16e..2d0873cfcd2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java @@ -539,7 +539,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants { } mnemonicInputMap.put(KeyStroke.getKeyStroke(mnemonic, Event.ALT_MASK), "setSelectedIndex"); - mnemonicToIndexMap.put(new Integer(mnemonic), new Integer(index)); + mnemonicToIndexMap.put(Integer.valueOf(mnemonic), Integer.valueOf(index)); } /** @@ -2231,7 +2231,7 @@ public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants { mnemonic -= ('a' - 'A'); } Integer index = (Integer)ui.mnemonicToIndexMap. - get(new Integer(mnemonic)); + get(Integer.valueOf(mnemonic)); if (index != null && pane.isEnabledAt(index.intValue())) { pane.setSelectedIndex(index.intValue()); } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java index c2dff6035c4..e039d1b425b 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicToolBarUI.java @@ -178,7 +178,7 @@ public class BasicToolBarUI extends ToolBarUI implements SwingConstants dragWindow = null; dockingSource = null; - c.putClientProperty( FOCUSED_COMP_INDEX, new Integer( focusedCompIndex ) ); + c.putClientProperty( FOCUSED_COMP_INDEX, Integer.valueOf( focusedCompIndex ) ); } protected void installDefaults( ) diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java index af0405f5774..d1f7c05935d 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java @@ -455,7 +455,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel Insets zeroInsets = new InsetsUIResource(0, 0, 0, 0); - Integer zero = new Integer(0); + Integer zero = Integer.valueOf(0); Object textFieldBorder = new SwingLazyValue("javax.swing.plaf.metal.MetalBorders", @@ -904,7 +904,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel "ProgressBar.selectionBackground", primaryControlDarkShadow, "ProgressBar.border", progressBarBorder, "ProgressBar.cellSpacing", zero, - "ProgressBar.cellLength", new Integer(1), + "ProgressBar.cellLength", Integer.valueOf(1), // Combo Box "ComboBox.background", control, @@ -971,7 +971,7 @@ public class MetalLookAndFeel extends BasicLookAndFeel "DesktopIcon.font", controlTextValue, "DesktopIcon.foreground", controlTextColor, "DesktopIcon.background", control, - "DesktopIcon.width", new Integer(160), + "DesktopIcon.width", Integer.valueOf(160), "Desktop.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthArrowButton.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthArrowButton.java index 51cc619a41b..dd703d0b517 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthArrowButton.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthArrowButton.java @@ -53,7 +53,7 @@ class SynthArrowButton extends JButton implements SwingConstants, UIResource { public void setDirection(int dir) { direction = dir; - putClientProperty("__arrow_direction__", new Integer(dir)); + putClientProperty("__arrow_direction__", Integer.valueOf(dir)); repaint(); } diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java index 88e15c6bcf9..e41fead8add 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java @@ -96,7 +96,7 @@ class SynthDesktopPaneUI extends BasicDesktopPaneUI implements } taskBar.setBackground(desktop.getBackground()); desktop.add(taskBar, - new Integer(JLayeredPane.PALETTE_LAYER.intValue() + 1)); + Integer.valueOf(JLayeredPane.PALETTE_LAYER.intValue() + 1)); if (desktop.isShowing()) { taskBar.adjustSize(); } diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java index 84c84de4912..ddbc7ae7e69 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java @@ -127,7 +127,7 @@ class SynthSplitPaneUI extends BasicSplitPaneUI implements if (style != oldStyle) { Object value = style.get(context, "SplitPane.size"); if (value == null) { - value = new Integer(6); + value = Integer.valueOf(6); } LookAndFeel.installProperty(splitPane, "dividerSize", value); diff --git a/jdk/src/share/classes/javax/swing/table/TableColumn.java b/jdk/src/share/classes/javax/swing/table/TableColumn.java index dddcdc3312d..890b855c746 100644 --- a/jdk/src/share/classes/javax/swing/table/TableColumn.java +++ b/jdk/src/share/classes/javax/swing/table/TableColumn.java @@ -281,7 +281,7 @@ public class TableColumn extends Object implements Serializable { private void firePropertyChange(String propertyName, int oldValue, int newValue) { if (oldValue != newValue) { - firePropertyChange(propertyName, new Integer(oldValue), new Integer(newValue)); + firePropertyChange(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue)); } } diff --git a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java index d9ca3f387dc..406350a9b10 100644 --- a/jdk/src/share/classes/javax/swing/text/AbstractDocument.java +++ b/jdk/src/share/classes/javax/swing/text/AbstractDocument.java @@ -351,7 +351,7 @@ public abstract class AbstractDocument implements Document, Serializable { * loaded asynchronously */ public void setAsynchronousLoadPriority(int p) { - Integer loadPriority = (p >= 0) ? new Integer(p) : null; + Integer loadPriority = (p >= 0) ? Integer.valueOf(p) : null; putProperty(AbstractDocument.AsyncLoadPriority, loadPriority); } @@ -2675,7 +2675,7 @@ public abstract class AbstractDocument implements Document, Serializable { */ BidiElement(Element parent, int start, int end, int level) { super(parent, new SimpleAttributeSet(), start, end); - addAttribute(StyleConstants.BidiLevel, new Integer(level)); + addAttribute(StyleConstants.BidiLevel, Integer.valueOf(level)); //System.out.println("BidiElement: start = " + start // + " end = " + end + " level = " + level ); } diff --git a/jdk/src/share/classes/javax/swing/text/NumberFormatter.java b/jdk/src/share/classes/javax/swing/text/NumberFormatter.java index c9c47193825..76e3a24029e 100644 --- a/jdk/src/share/classes/javax/swing/text/NumberFormatter.java +++ b/jdk/src/share/classes/javax/swing/text/NumberFormatter.java @@ -173,23 +173,24 @@ public class NumberFormatter extends InternationalFormatter { */ private Object convertValueToValueClass(Object value, Class valueClass) { if (valueClass != null && (value instanceof Number)) { + Number numberValue = (Number)value; if (valueClass == Integer.class) { - return new Integer(((Number)value).intValue()); + return Integer.valueOf(numberValue.intValue()); } else if (valueClass == Long.class) { - return new Long(((Number)value).longValue()); + return Long.valueOf(numberValue.longValue()); } else if (valueClass == Float.class) { - return new Float(((Number)value).floatValue()); + return Float.valueOf(numberValue.floatValue()); } else if (valueClass == Double.class) { - return new Double(((Number)value).doubleValue()); + return Double.valueOf(numberValue.doubleValue()); } else if (valueClass == Byte.class) { - return new Byte(((Number)value).byteValue()); + return Byte.valueOf(numberValue.byteValue()); } else if (valueClass == Short.class) { - return new Short(((Number)value).shortValue()); + return Short.valueOf(numberValue.shortValue()); } } return value; diff --git a/jdk/src/share/classes/javax/swing/text/PlainDocument.java b/jdk/src/share/classes/javax/swing/text/PlainDocument.java index 85ea6c8d262..2a3b6dbea92 100644 --- a/jdk/src/share/classes/javax/swing/text/PlainDocument.java +++ b/jdk/src/share/classes/javax/swing/text/PlainDocument.java @@ -89,7 +89,7 @@ public class PlainDocument extends AbstractDocument { */ public PlainDocument(Content c) { super(c); - putProperty(tabSizeAttribute, new Integer(8)); + putProperty(tabSizeAttribute, Integer.valueOf(8)); defaultRoot = createDefaultRoot(); } diff --git a/jdk/src/share/classes/javax/swing/text/Segment.java b/jdk/src/share/classes/javax/swing/text/Segment.java index 0186c900d4e..55d17a9a5cd 100644 --- a/jdk/src/share/classes/javax/swing/text/Segment.java +++ b/jdk/src/share/classes/javax/swing/text/Segment.java @@ -118,7 +118,7 @@ public class Segment implements Cloneable, CharacterIterator, CharSequence { if (array != null) { return new String(array, offset, count); } - return new String(); + return ""; } // --- CharacterIterator methods ------------------------------------- diff --git a/jdk/src/share/classes/javax/swing/text/StyleConstants.java b/jdk/src/share/classes/javax/swing/text/StyleConstants.java index fa59a783f5d..aaefef88f50 100644 --- a/jdk/src/share/classes/javax/swing/text/StyleConstants.java +++ b/jdk/src/share/classes/javax/swing/text/StyleConstants.java @@ -296,7 +296,7 @@ public class StyleConstants { * @param o the bidi level value */ public static void setBidiLevel(MutableAttributeSet a, int o) { - a.addAttribute(BidiLevel, new Integer(o)); + a.addAttribute(BidiLevel, Integer.valueOf(o)); } /** @@ -386,7 +386,7 @@ public class StyleConstants { * @param s the font size */ public static void setFontSize(MutableAttributeSet a, int s) { - a.addAttribute(FontSize, new Integer(s)); + a.addAttribute(FontSize, Integer.valueOf(s)); } /** @@ -753,7 +753,7 @@ public class StyleConstants { * @param align the alignment value */ public static void setAlignment(MutableAttributeSet a, int align) { - a.addAttribute(Alignment, new Integer(align)); + a.addAttribute(Alignment, Integer.valueOf(align)); } /** diff --git a/jdk/src/share/classes/javax/swing/text/html/AccessibleHTML.java b/jdk/src/share/classes/javax/swing/text/html/AccessibleHTML.java index a4680179c38..d0643bf342c 100644 --- a/jdk/src/share/classes/javax/swing/text/html/AccessibleHTML.java +++ b/jdk/src/share/classes/javax/swing/text/html/AccessibleHTML.java @@ -1970,7 +1970,7 @@ class AccessibleHTML implements Accessible { for (int i = 0; i < nRows; i++) { if (isAccessibleRowSelected(i)) { - vec.addElement(new Integer(i)); + vec.addElement(Integer.valueOf(i)); } } int retval[] = new int[vec.size()]; @@ -1995,7 +1995,7 @@ class AccessibleHTML implements Accessible { for (int i = 0; i < nColumns; i++) { if (isAccessibleColumnSelected(i)) { - vec.addElement(new Integer(i)); + vec.addElement(Integer.valueOf(i)); } } int retval[] = new int[vec.size()]; @@ -2139,7 +2139,7 @@ class AccessibleHTML implements Accessible { private int columnCount = 0; public void addHeader(TableCellElementInfo cellInfo, int rowNumber) { - Integer rowInteger = new Integer(rowNumber); + Integer rowInteger = Integer.valueOf(rowNumber); ArrayList list = (ArrayList)headers.get(rowInteger); if (list == null) { list = new ArrayList(); @@ -2201,7 +2201,7 @@ class AccessibleHTML implements Accessible { } private TableCellElementInfo getElementInfoAt(int r, int c) { - ArrayList list = (ArrayList)headers.get(new Integer(r)); + ArrayList list = (ArrayList)headers.get(Integer.valueOf(r)); if (list != null) { return (TableCellElementInfo)list.get(c); } else { diff --git a/jdk/src/share/classes/javax/swing/text/html/CSS.java b/jdk/src/share/classes/javax/swing/text/html/CSS.java index 40b5977e07a..56cb0fcb26c 100644 --- a/jdk/src/share/classes/javax/swing/text/html/CSS.java +++ b/jdk/src/share/classes/javax/swing/text/html/CSS.java @@ -1099,7 +1099,7 @@ public class CSS implements Serializable { */ static String colorToHex(Color color) { - String colorstr = new String("#"); + String colorstr = "#"; // Red String str = Integer.toHexString(color.getRed()); diff --git a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java index 980817d964a..1f5d498f812 100644 --- a/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java +++ b/jdk/src/share/classes/javax/swing/text/html/HTMLEditorKit.java @@ -1899,8 +1899,8 @@ public class HTMLEditorKit extends StyledEditorKit implements Accessible { // assistive technologies listening for such events. comp.getAccessibleContext().firePropertyChange( AccessibleContext.ACCESSIBLE_HYPERTEXT_OFFSET, - new Integer(kit.prevHypertextOffset), - new Integer(e.getDot())); + Integer.valueOf(kit.prevHypertextOffset), + Integer.valueOf(e.getDot())); } } } diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/AttributeList.java b/jdk/src/share/classes/javax/swing/text/html/parser/AttributeList.java index a2d48603da7..3eb1cdb3d90 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/AttributeList.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/AttributeList.java @@ -132,7 +132,7 @@ class AttributeList implements DTDConstants, Serializable { static Hashtable attributeTypes = new Hashtable(); static void defineAttributeType(String nm, int val) { - Integer num = new Integer(val); + Integer num = Integer.valueOf(val); attributeTypes.put(nm, num); attributeTypes.put(num, nm); } @@ -154,11 +154,11 @@ class AttributeList implements DTDConstants, Serializable { defineAttributeType("NUTOKEN", NUTOKEN); defineAttributeType("NUTOKENS", NUTOKENS); - attributeTypes.put("fixed", new Integer(FIXED)); - attributeTypes.put("required", new Integer(REQUIRED)); - attributeTypes.put("current", new Integer(CURRENT)); - attributeTypes.put("conref", new Integer(CONREF)); - attributeTypes.put("implied", new Integer(IMPLIED)); + attributeTypes.put("fixed", Integer.valueOf(FIXED)); + attributeTypes.put("required", Integer.valueOf(REQUIRED)); + attributeTypes.put("current", Integer.valueOf(CURRENT)); + attributeTypes.put("conref", Integer.valueOf(CONREF)); + attributeTypes.put("implied", Integer.valueOf(IMPLIED)); } public static int name2type(String nm) { @@ -167,6 +167,6 @@ class AttributeList implements DTDConstants, Serializable { } public static String type2name(int tp) { - return (String)attributeTypes.get(new Integer(tp)); + return (String)attributeTypes.get(Integer.valueOf(tp)); } } diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/DTD.java b/jdk/src/share/classes/javax/swing/text/html/parser/DTD.java index 3fd48f16b20..9ee714371cb 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/DTD.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/DTD.java @@ -113,7 +113,7 @@ class DTD implements DTDConstants { * ch character */ public Entity getEntity(int ch) { - return (Entity)entityHash.get(new Integer(ch)); + return (Entity)entityHash.get(Integer.valueOf(ch)); } /** @@ -178,7 +178,7 @@ class DTD implements DTDConstants { switch (type & ~GENERAL) { case CDATA: case SDATA: - entityHash.put(new Integer(data[0]), ent); + entityHash.put(Integer.valueOf(data[0]), ent); break; } } diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/Element.java b/jdk/src/share/classes/javax/swing/text/html/parser/Element.java index 54b68618d50..7807b430632 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/Element.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/Element.java @@ -162,10 +162,10 @@ class Element implements DTDConstants, Serializable { static Hashtable contentTypes = new Hashtable(); static { - contentTypes.put("CDATA", new Integer(CDATA)); - contentTypes.put("RCDATA", new Integer(RCDATA)); - contentTypes.put("EMPTY", new Integer(EMPTY)); - contentTypes.put("ANY", new Integer(ANY)); + contentTypes.put("CDATA", Integer.valueOf(CDATA)); + contentTypes.put("RCDATA", Integer.valueOf(RCDATA)); + contentTypes.put("EMPTY", Integer.valueOf(EMPTY)); + contentTypes.put("ANY", Integer.valueOf(ANY)); } public static int name2type(String nm) { diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/Entity.java b/jdk/src/share/classes/javax/swing/text/html/parser/Entity.java index f4a5cb9a73c..01e56125ae8 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/Entity.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/Entity.java @@ -110,15 +110,15 @@ class Entity implements DTDConstants { static Hashtable entityTypes = new Hashtable(); static { - entityTypes.put("PUBLIC", new Integer(PUBLIC)); - entityTypes.put("CDATA", new Integer(CDATA)); - entityTypes.put("SDATA", new Integer(SDATA)); - entityTypes.put("PI", new Integer(PI)); - entityTypes.put("STARTTAG", new Integer(STARTTAG)); - entityTypes.put("ENDTAG", new Integer(ENDTAG)); - entityTypes.put("MS", new Integer(MS)); - entityTypes.put("MD", new Integer(MD)); - entityTypes.put("SYSTEM", new Integer(SYSTEM)); + entityTypes.put("PUBLIC", Integer.valueOf(PUBLIC)); + entityTypes.put("CDATA", Integer.valueOf(CDATA)); + entityTypes.put("SDATA", Integer.valueOf(SDATA)); + entityTypes.put("PI", Integer.valueOf(PI)); + entityTypes.put("STARTTAG", Integer.valueOf(STARTTAG)); + entityTypes.put("ENDTAG", Integer.valueOf(ENDTAG)); + entityTypes.put("MS", Integer.valueOf(MS)); + entityTypes.put("MD", Integer.valueOf(MD)); + entityTypes.put("SYSTEM", Integer.valueOf(SYSTEM)); } /** diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java b/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java index 24ba58fffb3..7be7bf5ebf8 100644 --- a/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java +++ b/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java @@ -1842,7 +1842,7 @@ class Parser implements DTDConstants { String elemStr = getString(0); if (elemStr.equals("image")) { - elemStr = new String("img"); + elemStr = "img"; } /* determine if this element is part of the dtd. */ diff --git a/jdk/src/share/classes/javax/swing/text/rtf/RTFAttributes.java b/jdk/src/share/classes/javax/swing/text/rtf/RTFAttributes.java index 2bf54b31b94..fb1b95e9307 100644 --- a/jdk/src/share/classes/javax/swing/text/rtf/RTFAttributes.java +++ b/jdk/src/share/classes/javax/swing/text/rtf/RTFAttributes.java @@ -281,7 +281,7 @@ class RTFAttributes public AssertiveAttribute(int d, Object s, String r, int v) { super(d, s, r); - swingValue = new Integer(v); + swingValue = Integer.valueOf(v); } public boolean set(MutableAttributeSet target) @@ -343,7 +343,7 @@ class RTFAttributes public NumericAttribute(int d, Object s, String r, int ds, int dr) { - this(d, s, r, new Integer(ds), dr, 1f); + this(d, s, r, Integer.valueOf(ds), dr, 1f); } public NumericAttribute(int d, Object s, @@ -377,7 +377,7 @@ class RTFAttributes Number swingValue; if (scale == 1f) - swingValue = new Integer(parameter); + swingValue = Integer.valueOf(parameter); else swingValue = new Float(parameter / scale); target.addAttribute(swingName, swingValue); diff --git a/jdk/src/share/classes/javax/swing/text/rtf/RTFGenerator.java b/jdk/src/share/classes/javax/swing/text/rtf/RTFGenerator.java index 0c7a92f911d..201ba5364ad 100644 --- a/jdk/src/share/classes/javax/swing/text/rtf/RTFGenerator.java +++ b/jdk/src/share/classes/javax/swing/text/rtf/RTFGenerator.java @@ -83,11 +83,7 @@ class RTFGenerator extends Object static public final String defaultFontFamily = "Helvetica"; /* constants so we can avoid allocating objects in inner loops */ - /* these should all be final, but javac seems to be a bit buggy */ - static protected Integer One, Zero; - static protected Boolean False; - static protected Float ZeroPointZero; - static private Object MagicToken; + final static private Object MagicToken; /* An array of character-keyword pairs. This could be done as a dictionary (and lookup would be quicker), but that @@ -98,11 +94,7 @@ class RTFGenerator extends Object static protected CharacterKeywordPair[] textKeywords; static { - One = new Integer(1); - Zero = new Integer(0); - False = Boolean.valueOf(false); MagicToken = new Object(); - ZeroPointZero = new Float(0); Dictionary textKeywordDictionary = RTFReader.textKeywords; Enumeration keys = textKeywordDictionary.keys(); @@ -142,7 +134,7 @@ static public void writeDocument(Document d, OutputStream to) public RTFGenerator(OutputStream to) { colorTable = new Hashtable(); - colorTable.put(defaultRTFColor, new Integer(0)); + colorTable.put(defaultRTFColor, Integer.valueOf(0)); colorCount = 1; fontTable = new Hashtable(); @@ -693,7 +685,7 @@ protected void resetParagraphAttributes(MutableAttributeSet currentAttributes) { writeControlWord("pard"); - currentAttributes.addAttribute(StyleConstants.Alignment, Zero); + currentAttributes.addAttribute(StyleConstants.Alignment, Integer.valueOf(0)); int wordIndex; int wordCount = RTFAttributes.attributes.length; diff --git a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java index 8ca40d8beab..cbf9ead8c37 100644 --- a/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/tree/DefaultTreeSelectionModel.java @@ -157,8 +157,8 @@ public class DefaultTreeSelectionModel extends Object implements Cloneable, Seri selectionMode = TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION; if(oldMode != selectionMode && changeSupport != null) changeSupport.firePropertyChange(SELECTION_MODE_PROPERTY, - new Integer(oldMode), - new Integer(selectionMode)); + Integer.valueOf(oldMode), + Integer.valueOf(selectionMode)); } /** diff --git a/jdk/src/share/classes/sun/applet/AppletPanel.java b/jdk/src/share/classes/sun/applet/AppletPanel.java index fe4c356fe03..e02428b146b 100644 --- a/jdk/src/share/classes/sun/applet/AppletPanel.java +++ b/jdk/src/share/classes/sun/applet/AppletPanel.java @@ -285,7 +285,7 @@ abstract class AppletPanel extends Panel implements AppletStub, Runnable { //System.out.println("SEND0= " + id); queue = new Queue(); } - Integer eventId = new Integer(id); + Integer eventId = Integer.valueOf(id); queue.enqueue(eventId); notifyAll(); } diff --git a/jdk/src/share/classes/sun/applet/AppletViewer.java b/jdk/src/share/classes/sun/applet/AppletViewer.java index 5170b0258a1..69bd80e261c 100644 --- a/jdk/src/share/classes/sun/applet/AppletViewer.java +++ b/jdk/src/share/classes/sun/applet/AppletViewer.java @@ -587,9 +587,9 @@ public class AppletViewer extends Frame implements AppletContext, Dimension d = panel.size(); Insets in = panel.insets(); panel.atts.put("width", - new Integer(d.width - (in.left + in.right)).toString()); + Integer.toString(d.width - (in.left + in.right))); panel.atts.put("height", - new Integer(d.height - (in.top + in.bottom)).toString()); + Integer.toString(d.height - (in.top + in.bottom))); } /** diff --git a/jdk/src/share/classes/sun/awt/FontConfiguration.java b/jdk/src/share/classes/sun/awt/FontConfiguration.java index 9a1effd39a8..a6b94870b3f 100644 --- a/jdk/src/share/classes/sun/awt/FontConfiguration.java +++ b/jdk/src/share/classes/sun/awt/FontConfiguration.java @@ -1956,7 +1956,7 @@ public abstract class FontConfiguration { /*Init these tables to allow componentFontNameID, fontfileNameIDs to start from "1". */ - componentFontNameIDs.put("", new Short((short)0)); + componentFontNameIDs.put("", Short.valueOf((short)0)); fontfileNameIDs = new HashMap(); filenames = new HashMap(); diff --git a/jdk/src/share/classes/sun/awt/im/InputContext.java b/jdk/src/share/classes/sun/awt/im/InputContext.java index 5cb7e26705d..1ef31f1ded4 100644 --- a/jdk/src/share/classes/sun/awt/im/InputContext.java +++ b/jdk/src/share/classes/sun/awt/im/InputContext.java @@ -556,7 +556,7 @@ public class InputContext extends java.awt.im.InputContext } usedInputMethods.put(inputMethodLocator.deriveLocator(null), inputMethod); perInputMethodState.put(inputMethod, - new Boolean(clientWindowNotificationEnabled)); + Boolean.valueOf(clientWindowNotificationEnabled)); enableClientWindowNotification(inputMethod, false); if (this == inputMethodWindowContext) { inputMethod.hideWindows(); @@ -921,7 +921,7 @@ public class InputContext extends java.awt.im.InputContext if (perInputMethodState == null) { perInputMethodState = new HashMap(5); } - perInputMethodState.put(requester, new Boolean(enable)); + perInputMethodState.put(requester, Boolean.valueOf(enable)); return; } diff --git a/jdk/src/share/classes/sun/font/FileFontStrike.java b/jdk/src/share/classes/sun/font/FileFontStrike.java index edc9e67b6cb..76616d8ce39 100644 --- a/jdk/src/share/classes/sun/font/FileFontStrike.java +++ b/jdk/src/share/classes/sun/font/FileFontStrike.java @@ -657,7 +657,7 @@ public class FileFontStrike extends PhysicalStrike { * we first obtain this information, then the image, and never * will access this value again. */ - Integer key = new Integer(glyphCode); + Integer key = Integer.valueOf(glyphCode); Point2D.Float value = null; ConcurrentHashMap glyphMetricsMap = null; if (glyphMetricsMapRef != null) { @@ -724,7 +724,7 @@ public class FileFontStrike extends PhysicalStrike { boundsMap = new ConcurrentHashMap(); } - Integer key = new Integer(glyphCode); + Integer key = Integer.valueOf(glyphCode); Rectangle2D.Float bounds = boundsMap.get(key); if (bounds == null) { diff --git a/jdk/src/share/classes/sun/font/FontManager.java b/jdk/src/share/classes/sun/font/FontManager.java index 820c72728d3..d7fddd16d2b 100644 --- a/jdk/src/share/classes/sun/font/FontManager.java +++ b/jdk/src/share/classes/sun/font/FontManager.java @@ -2124,7 +2124,7 @@ public final class FontManager { private static void addLCIDMapEntry(Map map, String key, short value) { - map.put(key, new Short(value)); + map.put(key, Short.valueOf(value)); } private static synchronized void createLCIDMap() { diff --git a/jdk/src/share/classes/sun/font/FontResolver.java b/jdk/src/share/classes/sun/font/FontResolver.java index 5d130236e77..938fe3cade5 100644 --- a/jdk/src/share/classes/sun/font/FontResolver.java +++ b/jdk/src/share/classes/sun/font/FontResolver.java @@ -117,7 +117,7 @@ public final class FontResolver { Font2D font2D = FontManager.getFont2D(font); if (font2D.hasSupplementaryChars()) { fonts.add(font); - indices.add(new Integer(i)); + indices.add(Integer.valueOf(i)); } } diff --git a/jdk/src/share/classes/sun/font/PhysicalStrike.java b/jdk/src/share/classes/sun/font/PhysicalStrike.java index 31d8ff66281..b6f326bef53 100644 --- a/jdk/src/share/classes/sun/font/PhysicalStrike.java +++ b/jdk/src/share/classes/sun/font/PhysicalStrike.java @@ -114,7 +114,7 @@ public abstract class PhysicalStrike extends FontStrike { */ Point2D.Float getGlyphPoint(int glyphCode, int ptNumber) { Point2D.Float gp = null; - Integer ptKey = new Integer(glyphCode<<16|ptNumber); + Integer ptKey = Integer.valueOf(glyphCode<<16|ptNumber); if (glyphPointMapCache == null) { synchronized (this) { if (glyphPointMapCache == null) { diff --git a/jdk/src/share/classes/sun/java2d/SunGraphics2D.java b/jdk/src/share/classes/sun/java2d/SunGraphics2D.java index 887f4c91e97..018fad4b9bf 100644 --- a/jdk/src/share/classes/sun/java2d/SunGraphics2D.java +++ b/jdk/src/share/classes/sun/java2d/SunGraphics2D.java @@ -1374,7 +1374,7 @@ public final class SunGraphics2D SunHints.Value.get(SunHints.INTKEY_FRACTIONALMETRICS, fractionalMetricsHint)); model.put(SunHints.KEY_TEXT_ANTIALIAS_LCD_CONTRAST, - new Integer(lcdTextContrast)); + Integer.valueOf(lcdTextContrast)); Object value; switch (interpolationHint) { case SunHints.INTVAL_INTERPOLATION_NEAREST_NEIGHBOR: diff --git a/jdk/src/share/classes/sun/java2d/loops/SurfaceType.java b/jdk/src/share/classes/sun/java2d/loops/SurfaceType.java index c89d95a6a70..fc56cd9c77c 100644 --- a/jdk/src/share/classes/sun/java2d/loops/SurfaceType.java +++ b/jdk/src/share/classes/sun/java2d/loops/SurfaceType.java @@ -408,7 +408,7 @@ public final class SurfaceType { if (unusedUID > 255) { throw new InternalError("surface type id overflow"); } - i = new Integer(unusedUID++); + i = Integer.valueOf(unusedUID++); surfaceUIDMap.put(desc, i); } return i.intValue(); diff --git a/jdk/src/share/classes/sun/print/PSPrinterJob.java b/jdk/src/share/classes/sun/print/PSPrinterJob.java index 0b519599d13..5c2a9a5f216 100644 --- a/jdk/src/share/classes/sun/print/PSPrinterJob.java +++ b/jdk/src/share/classes/sun/print/PSPrinterJob.java @@ -1536,16 +1536,16 @@ public class PSPrinterJob extends RasterPrinterJob { execCmd = new String[ncomps]; execCmd[n++] = "/usr/bin/lpr"; if ((pFlags & PRINTER) != 0) { - execCmd[n++] = new String("-P" + printer); + execCmd[n++] = "-P" + printer; } if ((pFlags & BANNER) != 0) { - execCmd[n++] = new String("-J" + banner); + execCmd[n++] = "-J" + banner; } if ((pFlags & COPIES) != 0) { - execCmd[n++] = new String("-#" + new Integer(copies).toString()); + execCmd[n++] = "-#" + copies; } if ((pFlags & NOSHEET) != 0) { - execCmd[n++] = new String("-h"); + execCmd[n++] = "-h"; } if ((pFlags & OPTIONS) != 0) { execCmd[n++] = new String(options); @@ -1556,19 +1556,19 @@ public class PSPrinterJob extends RasterPrinterJob { execCmd[n++] = "/usr/bin/lp"; execCmd[n++] = "-c"; // make a copy of the spool file if ((pFlags & PRINTER) != 0) { - execCmd[n++] = new String("-d" + printer); + execCmd[n++] = "-d" + printer; } if ((pFlags & BANNER) != 0) { - execCmd[n++] = new String("-t" + banner); + execCmd[n++] = "-t" + banner; } if ((pFlags & COPIES) != 0) { - execCmd[n++] = new String("-n" + new Integer(copies).toString()); + execCmd[n++] = "-n" + copies; } if ((pFlags & NOSHEET) != 0) { - execCmd[n++] = new String("-o nobanner"); + execCmd[n++] = "-o nobanner"; } if ((pFlags & OPTIONS) != 0) { - execCmd[n++] = new String("-o" + options); + execCmd[n++] = "-o" + options; } } execCmd[n++] = spoolFile; diff --git a/jdk/src/share/classes/sun/print/RasterPrinterJob.java b/jdk/src/share/classes/sun/print/RasterPrinterJob.java index 9e2d2ffcfb5..1c0c0a8a2f4 100644 --- a/jdk/src/share/classes/sun/print/RasterPrinterJob.java +++ b/jdk/src/share/classes/sun/print/RasterPrinterJob.java @@ -245,7 +245,7 @@ public abstract class RasterPrinterJob extends PrinterJob { /** * The name of the job being printed. */ - private String mDocName = new String("Java Printing"); + private String mDocName = "Java Printing"; /** diff --git a/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java b/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java index e6039722316..3b3cc4d24b9 100644 --- a/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java +++ b/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java @@ -116,7 +116,7 @@ public final class VersionInfo throw new IllegalArgumentException(INVALID_VERSION_NUMBER_); } int version = getInt(major, minor, milli, micro); - Integer key = new Integer(version); + Integer key = Integer.valueOf(version); Object result = MAP_.get(key); if (result == null) { result = new VersionInfo(version); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java index bc6bacb2417..658b7cbf3d5 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java @@ -317,7 +317,7 @@ abstract class XDropTargetProtocol { protected final void removeEmbedderRegistryEntry(long embedder) { synchronized (this) { - embedderRegistry.remove(new Long(embedder)); + embedderRegistry.remove(Long.valueOf(embedder)); } } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java index eecad17af89..2d05578dd04 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java @@ -329,7 +329,7 @@ final class XDropTargetRegistry { embedderProtocols = Collections.unmodifiableList(embedderProtocols); - Long lToplevel = new Long(embedder); + Long lToplevel = Long.valueOf(embedder); boolean isXEmbedServer = false; synchronized (this) { EmbeddedDropSiteEntry entry = diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java index a5ce2df7404..28fd3c2246a 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java @@ -383,11 +383,11 @@ public class XEmbedServerTester implements XEventDispatcher { try { XCreateWindowParams params = new XCreateWindowParams(new Object[] { - XBaseWindow.PARENT_WINDOW, new Long(reparent?XToolkit.getDefaultRootWindow():parent), + XBaseWindow.PARENT_WINDOW, Long.valueOf(reparent?XToolkit.getDefaultRootWindow():parent), XBaseWindow.BOUNDS, initialBounds, XBaseWindow.EMBEDDED, Boolean.TRUE, XBaseWindow.VISIBLE, Boolean.valueOf(mapped == XEmbedHelper.XEMBED_MAPPED), - XBaseWindow.EVENT_MASK, new Long(VisibilityChangeMask | StructureNotifyMask | + XBaseWindow.EVENT_MASK, Long.valueOf(VisibilityChangeMask | StructureNotifyMask | SubstructureNotifyMask | KeyPressMask)}); window = new XBaseWindow(params); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java index d3baad68ed3..4e06328b9ae 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java @@ -908,7 +908,7 @@ class FileDialogFilter implements FilenameFilter { * Converts the filter into the form which is acceptable by Java's regexps */ private String convert(String filter) { - String regex = new String("^" + filter + "$"); + String regex = "^" + filter + "$"; regex = regex.replaceAll("\\.", "\\\\."); regex = regex.replaceAll("\\?", "."); regex = regex.replaceAll("\\*", ".*"); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XScrollbar.java b/jdk/src/solaris/classes/sun/awt/X11/XScrollbar.java index 14316beed91..8a2d21b7ccd 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XScrollbar.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XScrollbar.java @@ -458,16 +458,16 @@ abstract class XScrollbar { String type; switch (id) { case MouseEvent.MOUSE_PRESSED: - type = new String("press"); + type = "press"; break; case MouseEvent.MOUSE_RELEASED: - type = new String("release"); + type = "release"; break; case MouseEvent.MOUSE_DRAGGED: - type = new String("drag"); + type = "drag"; break; default: - type = new String("other"); + type = "other"; } log.finer("Mouse " + type + " event in scroll bar " + this + "x = " + x + ", y = " + y + diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java index 897142223da..78fd9db279b 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java @@ -421,7 +421,7 @@ public class X11GraphicsConfig extends GraphicsConfiguration { return new SunVolatileImage(target, target.getWidth(), target.getHeight(), - new Long(backBuffer)); + Long.valueOf(backBuffer)); } /** diff --git a/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java b/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java index 755e77aa860..bdb178e8918 100644 --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java @@ -164,7 +164,7 @@ public class X11GraphicsDevice if (ret[i] == null) { boolean doubleBuffer = (dbeSupported && - doubleBufferVisuals.contains(new Integer(visNum))); + doubleBufferVisuals.contains(Integer.valueOf(visNum))); ret[i] = X11GraphicsConfig.getConfig(this, visNum, depth, getConfigColormap(i, screen), doubleBuffer); @@ -199,7 +199,7 @@ public class X11GraphicsDevice public static native boolean isDBESupported(); // Callback for adding a new double buffer visual into our set private void addDoubleBufferVisual(int visNum) { - doubleBufferVisuals.add(new Integer(visNum)); + doubleBufferVisuals.add(Integer.valueOf(visNum)); } // Enumerates all visuals that support double buffering private native void getDoubleBufferVisuals(int screen); @@ -239,7 +239,7 @@ public class X11GraphicsDevice doubleBufferVisuals = new HashSet(); getDoubleBufferVisuals(screen); doubleBuffer = - doubleBufferVisuals.contains(new Integer(visNum)); + doubleBufferVisuals.contains(Integer.valueOf(visNum)); } defaultConfig = X11GraphicsConfig.getConfig(this, visNum, depth, getConfigColormap(0, screen), diff --git a/jdk/src/solaris/classes/sun/print/UnixPrintJob.java b/jdk/src/solaris/classes/sun/print/UnixPrintJob.java index b3ab80a6f92..ad86ee2545c 100644 --- a/jdk/src/solaris/classes/sun/print/UnixPrintJob.java +++ b/jdk/src/solaris/classes/sun/print/UnixPrintJob.java @@ -867,39 +867,38 @@ public class UnixPrintJob implements CancelablePrintJob { execCmd[n++] = "/usr/bin/lp"; execCmd[n++] = "-c"; // make a copy of the spool file if ((pFlags & PRINTER) != 0) { - execCmd[n++] = new String("-d" + printer); + execCmd[n++] = "-d" + printer; } if ((pFlags & BANNER) != 0) { String quoteChar = "\""; - execCmd[n++] = new String("-t " + quoteChar+banner+quoteChar); + execCmd[n++] = "-t " + quoteChar+banner+quoteChar; } if ((pFlags & COPIES) != 0) { - execCmd[n++] = new String("-n " + - new Integer(copies).toString()); + execCmd[n++] = "-n " + copies; } if ((pFlags & NOSHEET) != 0) { - execCmd[n++] = new String("-o nobanner"); + execCmd[n++] = "-o nobanner"; } if ((pFlags & OPTIONS) != 0) { - execCmd[n++] = new String("-o " + options); + execCmd[n++] = "-o " + options; } } else { execCmd = new String[ncomps]; execCmd[n++] = "/usr/bin/lpr"; if ((pFlags & PRINTER) != 0) { - execCmd[n++] = new String("-P" + printer); + execCmd[n++] = "-P" + printer; } if ((pFlags & BANNER) != 0) { - execCmd[n++] = new String("-J " + banner); + execCmd[n++] = "-J " + banner; } if ((pFlags & COPIES) != 0) { - execCmd[n++] = new String("-#" + new Integer(copies).toString()); + execCmd[n++] = "-#" + copies; } if ((pFlags & NOSHEET) != 0) { - execCmd[n++] = new String("-h"); + execCmd[n++] = "-h"; } if ((pFlags & OPTIONS) != 0) { - execCmd[n++] = new String("-o" + options); + execCmd[n++] = "-o" + options; } } execCmd[n++] = spoolFile; diff --git a/jdk/src/windows/classes/sun/awt/windows/WDataTransferer.java b/jdk/src/windows/classes/sun/awt/windows/WDataTransferer.java index fbab9e602ab..7e9429d4512 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WDataTransferer.java +++ b/jdk/src/windows/classes/sun/awt/windows/WDataTransferer.java @@ -568,7 +568,7 @@ class HTMLCodec extends InputStream { byte[] headerBytes = null, trailerBytes = null; try { - headerBytes = new String(header).getBytes(ENCODING); + headerBytes = header.toString().getBytes(ENCODING); trailerBytes = htmlSuffix.getBytes(ENCODING); } catch (UnsupportedEncodingException cannotHappen) { } diff --git a/jdk/src/windows/classes/sun/awt/windows/WInputMethod.java b/jdk/src/windows/classes/sun/awt/windows/WInputMethod.java index 1c3600ffb66..494ce4c0f45 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WInputMethod.java +++ b/jdk/src/windows/classes/sun/awt/windows/WInputMethod.java @@ -488,7 +488,7 @@ public class WInputMethod extends InputMethodAdapter attrStr.addAttribute(Attribute.INPUT_METHOD_SEGMENT, new Annotation(null), 0, text.length()); attrStr.addAttribute(Attribute.READING, - new Annotation(new String("")), 0, text.length()); + new Annotation(""), 0, text.length()); } // set Hilight Information diff --git a/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java b/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java index 070c67dd15e..2db3e8829ac 100644 --- a/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java +++ b/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java @@ -123,7 +123,7 @@ public class WWindowPeer extends WPanelPeer implements WindowPeer { public void setTitle(String title) { // allow a null title to pass as an empty string. if (title == null) { - title = new String(""); + title = ""; } _setTitle(title); } diff --git a/jdk/src/windows/classes/sun/print/Win32PrintService.java b/jdk/src/windows/classes/sun/print/Win32PrintService.java index ea5771b3ad2..f0f05267ae6 100644 --- a/jdk/src/windows/classes/sun/print/Win32PrintService.java +++ b/jdk/src/windows/classes/sun/print/Win32PrintService.java @@ -348,7 +348,7 @@ public class Win32PrintService implements PrintService, AttributeUpdater, idList = new ArrayList(); for (int i=0; i < media.length; i++) { - idList.add(new Integer(media[i])); + idList.add(Integer.valueOf(media[i])); } mediaSizes = getMediaSizes(idList, media); @@ -517,7 +517,7 @@ public class Win32PrintService implements PrintService, AttributeUpdater, if ((wid <= 0) || (ht <= 0)) { //Remove corresponding ID from list if (nMedia == media.length) { - Integer remObj = new Integer(media[i]); + Integer remObj = Integer.valueOf(media[i]); idList.remove(idList.indexOf(remObj)); } continue; @@ -539,7 +539,7 @@ public class Win32PrintService implements PrintService, AttributeUpdater, msList.add(ms); } catch(IllegalArgumentException e) { if (nMedia == media.length) { - Integer remObj = new Integer(media[i]); + Integer remObj = Integer.valueOf(media[i]); idList.remove(idList.indexOf(remObj)); } } @@ -984,7 +984,7 @@ public class Win32PrintService implements PrintService, AttributeUpdater, // cannot be null but to be safe, add a check if ((idList != null) && (mediaSizes != null) && (idList.size() == mediaSizes.length)) { - Integer defIdObj = new Integer(defPaper); + Integer defIdObj = Integer.valueOf(defPaper); int index = idList.indexOf(defIdObj); if (index>=0 && index Date: Mon, 7 Apr 2008 16:52:51 +0400 Subject: [PATCH 20/46] 6623459: Get rid of XConstant, XProtocolConstants and XUtilConstants antipattern Access to interface's fiels via their name rather then implementation Reviewed-by: volk, son --- .../classes/sun/awt/X11/MWMConstants.java | 6 +- .../sun/awt/X11/MotifDnDConstants.java | 38 ++-- .../awt/X11/MotifDnDDragSourceProtocol.java | 32 ++-- .../awt/X11/MotifDnDDropTargetProtocol.java | 40 ++--- .../sun/awt/X11/WindowPropertyGetter.java | 6 +- .../classes/sun/awt/X11/XAWTXSettings.java | 4 +- .../solaris/classes/sun/awt/X11/XAtom.java | 22 +-- .../classes/sun/awt/X11/XBaseMenuWindow.java | 18 +- .../classes/sun/awt/X11/XBaseWindow.java | 166 +++++++++--------- .../classes/sun/awt/X11/XClipboard.java | 8 +- .../classes/sun/awt/X11/XComponentPeer.java | 24 +-- .../classes/sun/awt/X11/XConstants.java | 13 +- .../classes/sun/awt/X11/XContentWindow.java | 16 +- .../sun/awt/X11/XCursorFontConstants.java | 7 +- .../classes/sun/awt/X11/XCustomCursor.java | 6 +- .../classes/sun/awt/X11/XDecoratedPeer.java | 30 ++-- .../classes/sun/awt/X11/XDialogPeer.java | 16 +- .../sun/awt/X11/XDnDDragSourceProtocol.java | 38 ++-- .../sun/awt/X11/XDnDDropTargetProtocol.java | 70 ++++---- .../sun/awt/X11/XDragSourceContextPeer.java | 64 +++---- .../sun/awt/X11/XDragSourceProtocol.java | 8 +- .../awt/X11/XDropTargetEventProcessor.java | 8 +- .../sun/awt/X11/XDropTargetProtocol.java | 4 +- .../sun/awt/X11/XDropTargetRegistry.java | 22 +-- .../classes/sun/awt/X11/XEmbedCanvasPeer.java | 32 ++-- .../sun/awt/X11/XEmbedChildProxyPeer.java | 8 +- .../sun/awt/X11/XEmbedClientHelper.java | 6 +- .../classes/sun/awt/X11/XEmbedHelper.java | 6 +- .../sun/awt/X11/XEmbedServerTester.java | 8 +- .../sun/awt/X11/XEmbeddedFramePeer.java | 6 +- .../sun/awt/X11/XEmbeddingContainer.java | 6 +- .../sun/awt/X11/XFocusProxyWindow.java | 8 +- .../classes/sun/awt/X11/XFramePeer.java | 12 +- .../sun/awt/X11/XGlobalCursorManager.java | 30 ++-- .../classes/sun/awt/X11/XIconWindow.java | 12 +- .../classes/sun/awt/X11/XMSelection.java | 16 +- .../classes/sun/awt/X11/XNETProtocol.java | 8 +- .../classes/sun/awt/X11/XProtocol.java | 4 +- .../sun/awt/X11/XProtocolConstants.java | 7 +- .../classes/sun/awt/X11/XSelection.java | 46 ++--- .../classes/sun/awt/X11/XSystemTrayPeer.java | 6 +- .../solaris/classes/sun/awt/X11/XToolkit.java | 37 ++-- .../classes/sun/awt/X11/XTrayIconPeer.java | 8 +- .../classes/sun/awt/X11/XUtilConstants.java | 7 +- .../classes/sun/awt/X11/XWINProtocol.java | 10 +- jdk/src/solaris/classes/sun/awt/X11/XWM.java | 102 +++++------ .../solaris/classes/sun/awt/X11/XWindow.java | 80 ++++----- .../classes/sun/awt/X11/XWindowPeer.java | 50 +++--- .../solaris/classes/sun/awt/X11/XlibUtil.java | 8 +- .../classes/sun/awt/X11/XlibWrapper.java | 21 ++- 50 files changed, 611 insertions(+), 599 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/MWMConstants.java b/jdk/src/solaris/classes/sun/awt/X11/MWMConstants.java index eceeee2622d..4be49190289 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MWMConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MWMConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -26,7 +26,9 @@ package sun.awt.X11; -public interface MWMConstants { +final public class MWMConstants { + + private MWMConstants(){} /* bit definitions for MwmHints.flags */ static final int MWM_HINTS_FUNCTIONS= (1 << 0); diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java index 9302361b04d..df4e857c6d4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java @@ -118,11 +118,11 @@ class MotifDnDConstants { XA_MOTIF_DRAG_WINDOW, 0, 1, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { int status = wpg.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() == XAtom.XA_WINDOW && wpg.getActualFormat() == 32 && @@ -163,20 +163,20 @@ class MotifDnDConstants { XlibWrapper.XGrabServer(newDisplay); try { - XlibWrapper.XSetCloseDownMode(newDisplay, (int)XlibWrapper.RetainPermanent); + XlibWrapper.XSetCloseDownMode(newDisplay, (int)XConstants.RetainPermanent); XSetWindowAttributes xwa = new XSetWindowAttributes(); try { xwa.set_override_redirect(true); - xwa.set_event_mask(XlibWrapper.PropertyChangeMask); + xwa.set_event_mask(XConstants.PropertyChangeMask); motifWindow = XlibWrapper.XCreateWindow(newDisplay, defaultRootWindow, -10, -10, 1, 1, 0, 0, - XlibWrapper.InputOnly, - XlibWrapper.CopyFromParent, - (XlibWrapper.CWOverrideRedirect | - XlibWrapper.CWEventMask), + XConstants.InputOnly, + XConstants.CopyFromParent, + (XConstants.CWOverrideRedirect | + XConstants.CWEventMask), xwa.pData); if (motifWindow == 0) { @@ -195,13 +195,13 @@ class MotifDnDConstants { defaultRootWindow, XA_MOTIF_DRAG_WINDOW.getAtom(), XAtom.XA_WINDOW, 32, - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, data, 1); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write motif drag window handle."); } @@ -282,7 +282,7 @@ class MotifDnDConstants { try { int status = wpg.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success + if (status != XConstants.Success || wpg.getActualType() != XA_MOTIF_DRAG_TARGETS.getAtom() || wpg.getData() == 0) { @@ -399,13 +399,13 @@ class MotifDnDConstants { motifWindow, XA_MOTIF_DRAG_TARGETS.getAtom(), XA_MOTIF_DRAG_TARGETS.getAtom(), 8, - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, data, tableSize); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { // Create a new motif window and retry. motifWindow = createMotifWindow(); @@ -415,13 +415,13 @@ class MotifDnDConstants { motifWindow, XA_MOTIF_DRAG_TARGETS.getAtom(), XA_MOTIF_DRAG_TARGETS.getAtom(), 8, - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, data, tableSize); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write motif drag targets property."); } } @@ -538,12 +538,12 @@ class MotifDnDConstants { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, XA_MOTIF_ATOM_0.getAtom(), XA_MOTIF_DRAG_INITIATOR_INFO.getAtom(), - 8, XlibWrapper.PropModeReplace, + 8, XConstants.PropModeReplace, structData, MOTIF_INITIATOR_INFO_SIZE); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write drag initiator info"); } } finally { @@ -571,12 +571,12 @@ class MotifDnDConstants { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(), XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(), - 8, XlibWrapper.PropModeReplace, + 8, XConstants.PropModeReplace, data, dataSize); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write Motif receiver info property"); } } finally { diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java index a2c07ad226d..b7e534c773f 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -44,7 +44,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol private static final Unsafe unsafe = XlibWrapper.unsafe; - private long targetEnterServerTime = XlibWrapper.CurrentTime; + private long targetEnterServerTime = XConstants.CurrentTime; protected MotifDnDDragSourceProtocol(XDragSourceProtocolListener listener) { super(listener); @@ -86,7 +86,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol if (!MotifDnDConstants.MotifDnDSelection.setOwner(contents, formatMap, formats, - XlibWrapper.CurrentTime)) { + XConstants.CurrentTime)) { cleanup(); throw new InvalidDnDOperationException("Cannot acquire selection ownership"); } @@ -137,7 +137,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol long time = t; /* Discard events from the previous receiver. */ - if (targetEnterServerTime == XlibWrapper.CurrentTime || + if (targetEnterServerTime == XConstants.CurrentTime || time < targetEnterServerTime) { return true; } @@ -181,7 +181,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol new WindowPropertyGetter(window, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO, 0, 0xFFFF, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { int status = wpg.execute(XToolkit.IgnoreBadWindowHandler); @@ -200,7 +200,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XlibWrapper.Success && wpg.getData() != 0 && + if (status == (int)XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -243,7 +243,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type(XlibWrapper.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(8); msg.set_message_type(MotifDnDConstants.XA_MOTIF_DRAG_AND_DROP_MESSAGE.getAtom()); @@ -267,7 +267,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -281,7 +281,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type(XlibWrapper.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(8); msg.set_message_type(MotifDnDConstants.XA_MOTIF_DRAG_AND_DROP_MESSAGE.getAtom()); @@ -305,7 +305,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -318,7 +318,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type(XlibWrapper.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(8); msg.set_message_type(MotifDnDConstants.XA_MOTIF_DRAG_AND_DROP_MESSAGE.getAtom()); @@ -336,7 +336,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -356,7 +356,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type(XlibWrapper.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(8); msg.set_message_type(MotifDnDConstants.XA_MOTIF_DRAG_AND_DROP_MESSAGE.getAtom()); @@ -382,7 +382,7 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -397,12 +397,12 @@ class MotifDnDDragSourceProtocol extends XDragSourceProtocol public void cleanupTargetInfo() { super.cleanupTargetInfo(); - targetEnterServerTime = XlibWrapper.CurrentTime; + targetEnterServerTime = XConstants.CurrentTime; } public void dispatchEvent(XEvent ev) { switch (ev.get_type()) { - case XlibWrapper.SelectionRequest: + case XConstants.SelectionRequest: XSelectionRequestEvent xsre = ev.get_xselectionrequest(); long atom = xsre.get_selection(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java index df348594fc5..383c21ec1ea 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java @@ -99,7 +99,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { new WindowPropertyGetter(embedder, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO, 0, 0xFFFF, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { status = wpg.execute(XToolkit.IgnoreBadWindowHandler); @@ -118,7 +118,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XlibWrapper.Success && wpg.getData() != 0 && + if (status == (int)XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -166,12 +166,12 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), embedder, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(), MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(), - 8, XlibWrapper.PropModeReplace, + 8, XConstants.PropModeReplace, data, dataSize); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write Motif receiver info property"); } } finally { @@ -201,7 +201,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { new WindowPropertyGetter(embedder, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO, 0, 0xFFFF, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { status = wpg.execute(XToolkit.IgnoreBadWindowHandler); @@ -220,7 +220,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XlibWrapper.Success && wpg.getData() != 0 && + if (status == (int)XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -240,12 +240,12 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), embedder, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(), MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(), - 8, XlibWrapper.PropModeReplace, + 8, XConstants.PropModeReplace, data, dataSize); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write Motif receiver info property"); } } @@ -273,7 +273,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { new WindowPropertyGetter(embedded, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO, 0, 0xFFFF, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { status = wpg.execute(XToolkit.IgnoreBadWindowHandler); @@ -292,7 +292,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { * CARD32 heap_offset B32; * } xmDragReceiverInfoStruct; */ - if (status == (int)XlibWrapper.Success && wpg.getData() != 0 && + if (status == (int)XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -322,12 +322,12 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { new WindowPropertyGetter(window, MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO, 0, 0xFFFF, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { int status = wpg.execute(XToolkit.IgnoreBadWindowHandler); - if (status == (int)XlibWrapper.Success && wpg.getData() != 0 && + if (status == (int)XConstants.Success && wpg.getData() != 0 && wpg.getActualType() != 0 && wpg.getActualFormat() == 8 && wpg.getNumberOfItems() >= MotifDnDConstants.MOTIF_RECEIVER_INFO_SIZE) { @@ -377,7 +377,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { try { int status = wpg.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && wpg.getData() != 0 && + if (status == XConstants.Success && wpg.getData() != 0 && wpg.getActualType() == MotifDnDConstants.XA_MOTIF_DRAG_INITIATOR_INFO.getAtom() && wpg.getActualFormat() == 8 && @@ -420,7 +420,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { if (status == 0 || (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { + XToolkit.saved_error.get_error_code() != XConstants.Success)) { throw new XException("XGetWindowAttributes failed"); } @@ -432,12 +432,12 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win, source_win_mask | - XlibWrapper.StructureNotifyMask); + XConstants.StructureNotifyMask); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("XSelectInput failed"); } @@ -590,7 +590,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent dummy = new XClientMessageEvent(); try { - dummy.set_type(XlibWrapper.ClientMessage); + dummy.set_type(XConstants.ClientMessage); dummy.set_window(xclient.get_window()); dummy.set_format(32); dummy.set_message_type(0); @@ -600,7 +600,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { dummy.set_data(3, 0); dummy.set_data(4, 0); XlibWrapper.XSendEvent(XToolkit.getDisplay(), - proxy, false, XlibWrapper.NoEventMask, + proxy, false, XConstants.NoEventMask, dummy.pData); } finally { dummy.dispose(); @@ -821,7 +821,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type(XlibWrapper.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_window(MotifDnDConstants.Swapper.getInt(data + 12, eventByteOrder)); msg.set_format(8); msg.set_message_type(MotifDnDConstants.XA_MOTIF_DRAG_AND_DROP_MESSAGE.getAtom()); @@ -878,7 +878,7 @@ class MotifDnDDropTargetProtocol extends XDropTargetProtocol { try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), msg.get_window(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { XToolkit.awtUnlock(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java b/jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java index ba5f3837bd7..6926f8c8271 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java +++ b/jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -89,7 +89,7 @@ public class WindowPropertyGetter { if (isCachingSupported() && isCached()) { readFromCache(); - return XlibWrapper.Success; + return XConstants.Success; } // Fix for performance problem - IgnodeBadWindowHandler is @@ -106,7 +106,7 @@ public class WindowPropertyGetter { offset, length, (auto_delete?1:0), type, actual_type, actual_format, nitems_ptr, bytes_after, data); - if (isCachingSupported() && status == XlibWrapper.Success && getData() != 0 && isCacheableProperty(property)) { + if (isCachingSupported() && status == XConstants.Success && getData() != 0 && isCacheableProperty(property)) { // Property has some data, we cache them cacheProperty(); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XAWTXSettings.java b/jdk/src/solaris/classes/sun/awt/X11/XAWTXSettings.java index 2db97c44a95..6727912c9a7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XAWTXSettings.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XAWTXSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -128,7 +128,7 @@ class XAWTXSettings extends XSettings implements XMSelectionListener { try { int status = getter.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { if (log.isLoggable(Level.FINE)) log.fine("OH OH : getter failed status = " + status ); settings = null; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java index b72e790a043..335917abf79 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XAtom.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XAtom.java @@ -370,7 +370,7 @@ public final class XAtom { false, property_type); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return 0; } if (getter.getActualType() != property_type || getter.getActualFormat() != 32) { @@ -401,7 +401,7 @@ public final class XAtom { try { Native.putCard32(XlibWrapper.larg1, value); XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, - atom, XA_CARDINAL, 32, XlibWrapper.PropModeReplace, + atom, XA_CARDINAL, 32, XConstants.PropModeReplace, XlibWrapper.larg1, 1); } finally { XToolkit.awtUnlock(); @@ -432,7 +432,7 @@ public final class XAtom { false, this); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return false; } if (getter.getActualType() != atom @@ -466,7 +466,7 @@ public final class XAtom { false, type); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return false; } if (getter.getActualType() != type @@ -497,7 +497,7 @@ public final class XAtom { XToolkit.awtLock(); try { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, - atom, atom, 32, XlibWrapper.PropModeReplace, + atom, atom, 32, XConstants.PropModeReplace, data_ptr, length); } finally { XToolkit.awtUnlock(); @@ -518,7 +518,7 @@ public final class XAtom { XToolkit.awtLock(); try { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, - atom, type, 32, XlibWrapper.PropModeReplace, + atom, type, 32, XConstants.PropModeReplace, data_ptr, length); } finally { XToolkit.awtUnlock(); @@ -539,7 +539,7 @@ public final class XAtom { XToolkit.awtLock(); try { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, - atom, type, 8, XlibWrapper.PropModeReplace, + atom, type, 8, XConstants.PropModeReplace, data_ptr, length); } finally { XToolkit.awtUnlock(); @@ -602,7 +602,7 @@ public final class XAtom { false, property_type); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return null; } if (getter.getActualType() != property_type || getter.getActualFormat() != 8) { @@ -674,7 +674,7 @@ public final class XAtom { false, XA_ATOM); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return emptyList; } if (getter.getActualType() != XA_ATOM || getter.getActualFormat() != 32) { @@ -797,7 +797,7 @@ public final class XAtom { try { Native.putWindow(XlibWrapper.larg1, window_value); XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window, - atom, XA_WINDOW, 32, XlibWrapper.PropModeReplace, + atom, XA_WINDOW, 32, XConstants.PropModeReplace, XlibWrapper.larg1, 1); } finally { XToolkit.awtUnlock(); @@ -821,7 +821,7 @@ public final class XAtom { false, XA_WINDOW); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return 0; } if (getter.getActualType() != XA_WINDOW || getter.getActualFormat() != 32) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java index cb241c121b6..1655be61ece 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseMenuWindow.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -885,14 +885,14 @@ abstract public class XBaseMenuWindow extends XWindow { */ protected boolean isEventDisabled(XEvent e) { switch (e.get_type()) { - case XlibWrapper.Expose : - case XlibWrapper.GraphicsExpose : - case XlibWrapper.ButtonPress: - case XlibWrapper.ButtonRelease: - case XlibWrapper.MotionNotify: - case XlibWrapper.KeyPress: - case XlibWrapper.KeyRelease: - case XlibWrapper.DestroyNotify: + case XConstants.Expose : + case XConstants.GraphicsExpose : + case XConstants.ButtonPress: + case XConstants.ButtonRelease: + case XConstants.MotionNotify: + case XConstants.KeyPress: + case XConstants.KeyRelease: + case XConstants.DestroyNotify: return super.isEventDisabled(e); default: return true; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java index cdac58a1240..f853d506784 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -30,7 +30,7 @@ import sun.awt.*; import java.util.logging.*; import java.util.*; -public class XBaseWindow implements XConstants, XUtilConstants { +public class XBaseWindow { private static final Logger log = Logger.getLogger("sun.awt.X11.XBaseWindow"); private static final Logger insLog = Logger.getLogger("sun.awt.X11.insets.XBaseWindow"); private static final Logger eventLog = Logger.getLogger("sun.awt.X11.event.XBaseWindow"); @@ -148,7 +148,7 @@ public class XBaseWindow implements XConstants, XUtilConstants { Long eventMask = (Long)params.get(EVENT_MASK); if (eventMask != null) { long mask = eventMask.longValue(); - mask |= SubstructureNotifyMask; + mask |= XConstants.SubstructureNotifyMask; params.put(EVENT_MASK, mask); } @@ -281,10 +281,10 @@ public class XBaseWindow implements XConstants, XUtilConstants { } params.putIfNull(PARENT_WINDOW, Long.valueOf(XToolkit.getDefaultRootWindow())); params.putIfNull(BOUNDS, new Rectangle(DEF_LOCATION, DEF_LOCATION, MIN_SIZE, MIN_SIZE)); - params.putIfNull(DEPTH, Integer.valueOf((int)XlibWrapper.CopyFromParent)); - params.putIfNull(VISUAL, Long.valueOf(XlibWrapper.CopyFromParent)); - params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XlibWrapper.InputOnly)); - params.putIfNull(VALUE_MASK, Long.valueOf(XlibWrapper.CWEventMask)); + params.putIfNull(DEPTH, Integer.valueOf((int)XConstants.CopyFromParent)); + params.putIfNull(VISUAL, Long.valueOf(XConstants.CopyFromParent)); + params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XConstants.InputOnly)); + params.putIfNull(VALUE_MASK, Long.valueOf(XConstants.CWEventMask)); Rectangle bounds = (Rectangle)params.get(BOUNDS); bounds.width = Math.max(MIN_SIZE, bounds.width); bounds.height = Math.max(MIN_SIZE, bounds.height); @@ -293,7 +293,7 @@ public class XBaseWindow implements XConstants, XUtilConstants { long eventMask = eventMaskObj != null ? eventMaskObj.longValue() : 0; // We use our own synthetic grab see XAwtState.getGrabWindow() // (see X vol. 1, 8.3.3.2) - eventMask |= PropertyChangeMask | OwnerGrabButtonMask; + eventMask |= XConstants.PropertyChangeMask | XConstants.OwnerGrabButtonMask; params.put(EVENT_MASK, Long.valueOf(eventMask)); } @@ -312,23 +312,23 @@ public class XBaseWindow implements XConstants, XUtilConstants { Long eventMask = (Long)params.get(EVENT_MASK); xattr.set_event_mask(eventMask.longValue()); - value_mask |= XlibWrapper.CWEventMask; + value_mask |= XConstants.CWEventMask; Long border_pixel = (Long)params.get(BORDER_PIXEL); if (border_pixel != null) { xattr.set_border_pixel(border_pixel.longValue()); - value_mask |= XlibWrapper.CWBorderPixel; + value_mask |= XConstants.CWBorderPixel; } Long colormap = (Long)params.get(COLORMAP); if (colormap != null) { xattr.set_colormap(colormap.longValue()); - value_mask |= XlibWrapper.CWColormap; + value_mask |= XConstants.CWColormap; } Long background_pixmap = (Long)params.get(BACKGROUND_PIXMAP); if (background_pixmap != null) { xattr.set_background_pixmap(background_pixmap.longValue()); - value_mask |= XlibWrapper.CWBackPixmap; + value_mask |= XConstants.CWBackPixmap; } Long parentWindow = (Long)params.get(PARENT_WINDOW); @@ -339,25 +339,25 @@ public class XBaseWindow implements XConstants, XUtilConstants { Boolean overrideRedirect = (Boolean)params.get(OVERRIDE_REDIRECT); if (overrideRedirect != null) { xattr.set_override_redirect(overrideRedirect.booleanValue()); - value_mask |= XlibWrapper.CWOverrideRedirect; + value_mask |= XConstants.CWOverrideRedirect; } Boolean saveUnder = (Boolean)params.get(SAVE_UNDER); if (saveUnder != null) { xattr.set_save_under(saveUnder.booleanValue()); - value_mask |= XlibWrapper.CWSaveUnder; + value_mask |= XConstants.CWSaveUnder; } Integer backingStore = (Integer)params.get(BACKING_STORE); if (backingStore != null) { xattr.set_backing_store(backingStore.intValue()); - value_mask |= XlibWrapper.CWBackingStore; + value_mask |= XConstants.CWBackingStore; } Integer bitGravity = (Integer)params.get(BIT_GRAVITY); if (bitGravity != null) { xattr.set_bit_gravity(bitGravity.intValue()); - value_mask |= XlibWrapper.CWBitGravity; + value_mask |= XConstants.CWBitGravity; } if (log.isLoggable(Level.FINE)) { @@ -487,25 +487,25 @@ public class XBaseWindow implements XConstants, XUtilConstants { // Note: if PPosition is not set in flags this means that // we want to reset PPosition in hints. This is necessary // for locationByPlatform functionality - if ((flags & XlibWrapper.PPosition) != 0) { + if ((flags & XUtilConstants.PPosition) != 0) { hints.set_x(x); hints.set_y(y); } - if ((flags & XlibWrapper.PSize) != 0) { + if ((flags & XUtilConstants.PSize) != 0) { hints.set_width(width); hints.set_height(height); - } else if ((hints.get_flags() & XlibWrapper.PSize) != 0) { - flags |= XlibWrapper.PSize; + } else if ((hints.get_flags() & XUtilConstants.PSize) != 0) { + flags |= XUtilConstants.PSize; } - if ((flags & XlibWrapper.PMinSize) != 0) { + if ((flags & XUtilConstants.PMinSize) != 0) { hints.set_min_width(width); hints.set_min_height(height); - } else if ((hints.get_flags() & XlibWrapper.PMinSize) != 0) { - flags |= XlibWrapper.PMinSize; + } else if ((hints.get_flags() & XUtilConstants.PMinSize) != 0) { + flags |= XUtilConstants.PMinSize; //Fix for 4320050: Minimum size for java.awt.Frame is not being enforced. //We don't need to reset minimum size if it's already set } - if ((flags & XlibWrapper.PMaxSize) != 0) { + if ((flags & XUtilConstants.PMaxSize) != 0) { if (maxBounds != null) { if (maxBounds.width != Integer.MAX_VALUE) { hints.set_max_width(maxBounds.width); @@ -521,8 +521,8 @@ public class XBaseWindow implements XConstants, XUtilConstants { hints.set_max_width(width); hints.set_max_height(height); } - } else if ((hints.get_flags() & XlibWrapper.PMaxSize) != 0) { - flags |= XlibWrapper.PMaxSize; + } else if ((hints.get_flags() & XUtilConstants.PMaxSize) != 0) { + flags |= XUtilConstants.PMaxSize; if (maxBounds != null) { if (maxBounds.width != Integer.MAX_VALUE) { hints.set_max_width(maxBounds.width); @@ -538,9 +538,9 @@ public class XBaseWindow implements XConstants, XUtilConstants { // Leave intact } } - flags |= XlibWrapper.PWinGravity; + flags |= XUtilConstants.PWinGravity; hints.set_flags(flags); - hints.set_win_gravity((int)XlibWrapper.NorthWestGravity); + hints.set_win_gravity((int)XConstants.NorthWestGravity); if (insLog.isLoggable(Level.FINER)) insLog.finer("Setting hints, resulted flags " + XlibWrapper.hintsToString(flags) + ", values " + hints); XlibWrapper.XSetWMNormalHints(XToolkit.getDisplay(), getWindow(), hints.pData); @@ -552,7 +552,7 @@ public class XBaseWindow implements XConstants, XUtilConstants { public boolean isMinSizeSet() { XSizeHints hints = getHints(); long flags = hints.get_flags(); - return ((flags & XlibWrapper.PMinSize) == XlibWrapper.PMinSize); + return ((flags & XUtilConstants.PMinSize) == XUtilConstants.PMinSize); } /** @@ -837,29 +837,29 @@ public class XBaseWindow implements XConstants, XUtilConstants { //6273031: PIT. Choice drop down does not close once it is right clicked to show a popup menu //remember previous window having grab and if it's not null ungrab it. XBaseWindow prevGrabWindow = XAwtState.getGrabWindow(); - final int eventMask = (int) (ButtonPressMask | ButtonReleaseMask - | EnterWindowMask | LeaveWindowMask | PointerMotionMask - | ButtonMotionMask); + final int eventMask = (int) (XConstants.ButtonPressMask | XConstants.ButtonReleaseMask + | XConstants.EnterWindowMask | XConstants.LeaveWindowMask | XConstants.PointerMotionMask + | XConstants.ButtonMotionMask); final int ownerEvents = 1; int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(), - getContentWindow(), ownerEvents, eventMask, GrabModeAsync, - GrabModeAsync, None, (XWM.isMotif() ? XToolkit.arrowCursor : None), - CurrentTime); + getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync, + XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None), + XConstants.CurrentTime); // Check grab results to be consistent with X server grab - if (ptrGrab != GrabSuccess) { - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), CurrentTime); + if (ptrGrab != XConstants.GrabSuccess) { + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); XAwtState.setGrabWindow(null); grabLog.fine(" Grab Failure - mouse"); return false; } int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(), - getContentWindow(), ownerEvents, GrabModeAsync, GrabModeAsync, - CurrentTime); - if (keyGrab != GrabSuccess) { - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), CurrentTime); - XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), CurrentTime); + getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync, + XConstants.CurrentTime); + if (keyGrab != XConstants.GrabSuccess) { + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); XAwtState.setGrabWindow(null); grabLog.fine(" Grab Failure - keyboard"); return false; @@ -882,8 +882,8 @@ public class XBaseWindow implements XConstants, XUtilConstants { grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow}); if (grabWindow != null) { grabWindow.ungrabInputImpl(); - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), CurrentTime); - XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), CurrentTime); + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); XAwtState.setGrabWindow(null); // we need to call XFlush() here to force ungrab // see 6384219 for details @@ -979,15 +979,15 @@ public class XBaseWindow implements XConstants, XUtilConstants { */ public void handleButtonPressRelease(XEvent xev) { XButtonEvent xbe = xev.get_xbutton(); - final int buttonState = xbe.get_state() & (Button1Mask | Button2Mask - | Button3Mask | Button4Mask | Button5Mask); + final int buttonState = xbe.get_state() & (XConstants.Button1Mask | XConstants.Button2Mask + | XConstants.Button3Mask | XConstants.Button4Mask | XConstants.Button5Mask); switch (xev.get_type()) { - case ButtonPress: + case XConstants.ButtonPress: if (buttonState == 0) { XAwtState.setAutoGrabWindow(this); } break; - case ButtonRelease: + case XConstants.ButtonRelease: if (isFullRelease(buttonState, xbe.get_button())) { XAwtState.setAutoGrabWindow(null); } @@ -1012,30 +1012,30 @@ public class XBaseWindow implements XConstants, XUtilConstants { */ static boolean isFullRelease(int buttonState, int button) { switch (button) { - case Button1: - return buttonState == Button1Mask; - case Button2: - return buttonState == Button2Mask; - case Button3: - return buttonState == Button3Mask; - case Button4: - return buttonState == Button4Mask; - case Button5: - return buttonState == Button5Mask; + case XConstants.Button1: + return buttonState == XConstants.Button1Mask; + case XConstants.Button2: + return buttonState == XConstants.Button2Mask; + case XConstants.Button3: + return buttonState == XConstants.Button3Mask; + case XConstants.Button4: + return buttonState == XConstants.Button4Mask; + case XConstants.Button5: + return buttonState == XConstants.Button5Mask; } return buttonState == 0; } static boolean isGrabbedEvent(XEvent ev, XBaseWindow target) { switch (ev.get_type()) { - case ButtonPress: - case ButtonRelease: - case MotionNotify: - case KeyPress: - case KeyRelease: + case XConstants.ButtonPress: + case XConstants.ButtonRelease: + case XConstants.MotionNotify: + case XConstants.KeyPress: + case XConstants.KeyRelease: return true; - case LeaveNotify: - case EnterNotify: + case XConstants.LeaveNotify: + case XConstants.EnterNotify: // We shouldn't dispatch this events to the grabbed components (see 6317481) // But this logic is important if the grabbed component is top-level (see realSync) return (target instanceof XWindowPeer); @@ -1067,53 +1067,53 @@ public class XBaseWindow implements XConstants, XUtilConstants { switch (type) { - case VisibilityNotify: + case XConstants.VisibilityNotify: handleVisibilityEvent(xev); break; - case ClientMessage: + case XConstants.ClientMessage: handleClientMessage(xev); break; - case Expose : - case GraphicsExpose : + case XConstants.Expose : + case XConstants.GraphicsExpose : handleExposeEvent(xev); break; - case ButtonPress: - case ButtonRelease: + case XConstants.ButtonPress: + case XConstants.ButtonRelease: handleButtonPressRelease(xev); break; - case MotionNotify: + case XConstants.MotionNotify: handleMotionNotify(xev); break; - case KeyPress: + case XConstants.KeyPress: handleKeyPress(xev); break; - case KeyRelease: + case XConstants.KeyRelease: handleKeyRelease(xev); break; - case EnterNotify: - case LeaveNotify: + case XConstants.EnterNotify: + case XConstants.LeaveNotify: handleXCrossingEvent(xev); break; - case ConfigureNotify: + case XConstants.ConfigureNotify: handleConfigureNotifyEvent(xev); break; - case MapNotify: + case XConstants.MapNotify: handleMapNotifyEvent(xev); break; - case UnmapNotify: + case XConstants.UnmapNotify: handleUnmapNotifyEvent(xev); break; - case ReparentNotify: + case XConstants.ReparentNotify: handleReparentNotifyEvent(xev); break; - case PropertyNotify: + case XConstants.PropertyNotify: handlePropertyNotify(xev); break; - case DestroyNotify: + case XConstants.DestroyNotify: handleDestroyNotify(xev); break; - case CreateNotify: + case XConstants.CreateNotify: handleCreateNotify(xev); break; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XClipboard.java b/jdk/src/solaris/classes/sun/awt/X11/XClipboard.java index 138e11d9a8c..f6009e79c12 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XClipboard.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XClipboard.java @@ -185,7 +185,7 @@ public final class XClipboard extends SunClipboard implements OwnershipListener private static class SelectionNotifyHandler implements XEventDispatcher { public void dispatchEvent(XEvent ev) { - if (ev.get_type() == XlibWrapper.SelectionNotify) { + if (ev.get_type() == XConstants.SelectionNotify) { final XSelectionEvent xse = ev.get_xselection(); XClipboard clipboard = null; synchronized (XClipboard.classLock) { @@ -223,7 +223,7 @@ public final class XClipboard extends SunClipboard implements OwnershipListener XDataTransferer.TARGETS_ATOM.getAtom(), getTargetsPropertyAtom().getAtom(), XWindow.getXAWTRootWindow().getWindow(), - XlibWrapper.CurrentTime); + XConstants.CurrentTime); isSelectionNotifyProcessed = false; } } finally { @@ -260,7 +260,7 @@ public final class XClipboard extends SunClipboard implements OwnershipListener long[] formats = null; - if (propertyAtom == XlibWrapper.None) { + if (propertyAtom == XConstants.None) { // We treat None property atom as "empty selection". formats = new long[0]; } else { @@ -268,7 +268,7 @@ public final class XClipboard extends SunClipboard implements OwnershipListener new WindowPropertyGetter(XWindow.getXAWTRootWindow().getWindow(), XAtom.get(propertyAtom), 0, XSelection.MAX_LENGTH, true, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { targetsGetter.execute(); formats = XSelection.getFormats(targetsGetter); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java index fb687e36830..8e9c930889f 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java @@ -72,7 +72,7 @@ import sun.awt.image.SunVolatileImage; import sun.awt.image.ToolkitImage; import sun.java2d.pipe.Region; -public class XComponentPeer extends XWindow implements ComponentPeer, DropTargetPeer, XConstants { +public class XComponentPeer extends XWindow implements ComponentPeer, DropTargetPeer { /* FIX ME: these constants copied from java.awt.KeyboardFocusManager */ static final int SNFH_FAILURE = 0; static final int SNFH_SUCCESS_HANDLED = 1; @@ -718,7 +718,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget * handleJavaMouseEvent() would be more suitable place to do this * but we want Swing to have this functionality also. */ - if (xev.get_type() == ButtonPress) { + if (xev.get_type() == XConstants.ButtonPress) { final XWindowPeer parentXWindow = getParentTopLevel(); Window parentWindow = (Window)parentXWindow.getTarget(); if (parentXWindow.isFocusableWindow() && parentXWindow.isSimpleWindow() && @@ -841,7 +841,7 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget XSetWindowAttributes xwa = new XSetWindowAttributes(); xwa.set_cursor(xcursor); - long valuemask = XlibWrapper.CWCursor; + long valuemask = XConstants.CWCursor; XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),getWindow(),valuemask,xwa.pData); XlibWrapper.XFlush(XToolkit.getDisplay()); @@ -1342,20 +1342,20 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget enableLog.log(Level.FINEST, "Component is {1}, checking for disabled event {0}", new Object[] {e, (isEnabled()?"enabled":"disable")}); if (!isEnabled()) { switch (e.get_type()) { - case ButtonPress: - case ButtonRelease: - case KeyPress: - case KeyRelease: - case EnterNotify: - case LeaveNotify: - case MotionNotify: + case XConstants.ButtonPress: + case XConstants.ButtonRelease: + case XConstants.KeyPress: + case XConstants.KeyRelease: + case XConstants.EnterNotify: + case XConstants.LeaveNotify: + case XConstants.MotionNotify: enableLog.log(Level.FINER, "Event {0} is disable", new Object[] {e}); return true; } } switch(e.get_type()) { - case MapNotify: - case UnmapNotify: + case XConstants.MapNotify: + case XConstants.UnmapNotify: return true; } return super.isEventDisabled(e); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XConstants.java b/jdk/src/solaris/classes/sun/awt/X11/XConstants.java index 4c75f03fd34..e9de6804bea 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -25,7 +25,10 @@ package sun.awt.X11; -public interface XConstants { +final public class XConstants { + + private XConstants(){} + public static final int X_PROTOCOL = 11 ; /* current protocol version */ public static final int X_PROTOCOL_REVISION = 0 ; /* current minor version */ @@ -292,9 +295,9 @@ public interface XConstants { public static final int RevertToParent = 2 ; /* Used in XEventsQueued */ - int QueuedAlready = 0; - int QueuedAfterReading = 1; - int QueuedAfterFlush = 2; + public static final int QueuedAlready = 0; + public static final int QueuedAfterReading = 1; + public static final int QueuedAfterFlush = 2; /***************************************************************** diff --git a/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java index 268f7f5d151..6a32fe9bdc3 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XContentWindow.java @@ -43,7 +43,7 @@ import sun.awt.ComponentAccessor; * It should always be located at (- left inset, - top inset) in the associated * decorated window. So coordinates in it would be the same as java coordinates. */ -public final class XContentWindow extends XWindow implements XConstants { +public final class XContentWindow extends XWindow { private static Logger insLog = Logger.getLogger("sun.awt.X11.insets.XContentWindow"); static XContentWindow createContent(XDecoratedPeer parentFrame) { @@ -76,10 +76,10 @@ public final class XContentWindow extends XWindow implements XConstants { void preInit(XCreateWindowParams params) { super.preInit(params); - params.putIfNull(BIT_GRAVITY, Integer.valueOf(NorthWestGravity)); + params.putIfNull(BIT_GRAVITY, Integer.valueOf(XConstants.NorthWestGravity)); Long eventMask = (Long)params.get(EVENT_MASK); if (eventMask != null) { - eventMask = eventMask & ~(StructureNotifyMask); + eventMask = eventMask & ~(XConstants.StructureNotifyMask); params.put(EVENT_MASK, eventMask); } } @@ -90,15 +90,15 @@ public final class XContentWindow extends XWindow implements XConstants { protected boolean isEventDisabled(XEvent e) { switch (e.get_type()) { // Override parentFrame to receive MouseEnter/Exit - case EnterNotify: - case LeaveNotify: + case XConstants.EnterNotify: + case XConstants.LeaveNotify: return false; // We handle ConfigureNotify specifically in XDecoratedPeer - case ConfigureNotify: + case XConstants.ConfigureNotify: return true; // We don't want SHOWN/HIDDEN on content window since it will duplicate XDecoratedPeer - case MapNotify: - case UnmapNotify: + case XConstants.MapNotify: + case XConstants.UnmapNotify: return true; default: return super.isEventDisabled(e) || parentFrame.isEventDisabled(e); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XCursorFontConstants.java b/jdk/src/solaris/classes/sun/awt/X11/XCursorFontConstants.java index d57041523ca..baf33ab3b15 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XCursorFontConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XCursorFontConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -25,7 +25,10 @@ package sun.awt.X11; -public interface XCursorFontConstants { +final public class XCursorFontConstants { + + private XCursorFontConstants(){} + /* cursorfont defines */ static final int XC_num_glyphs=154; static final int XC_X_cursor=0; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XCustomCursor.java b/jdk/src/solaris/classes/sun/awt/X11/XCustomCursor.java index 32f269595b0..d308ffd774c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XCustomCursor.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XCustomCursor.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -83,7 +83,7 @@ public class XCustomCursor extends X11CustomCursor { long colormap = XToolkit.getDefaultXColormap(); XColor fore_color = new XColor(); - fore_color.set_flags((byte) (XlibWrapper.DoRed | XlibWrapper.DoGreen | XlibWrapper.DoBlue)); + fore_color.set_flags((byte) (XConstants.DoRed | XConstants.DoGreen | XConstants.DoBlue)); fore_color.set_red((short)(((fcolor >> 16) & 0x000000ff) << 8)); fore_color.set_green((short) (((fcolor >> 8) & 0x000000ff) << 8)); fore_color.set_blue((short)(((fcolor >> 0) & 0x000000ff) << 8)); @@ -92,7 +92,7 @@ public class XCustomCursor extends X11CustomCursor { XColor back_color = new XColor(); - back_color.set_flags((byte) (XlibWrapper.DoRed | XlibWrapper.DoGreen | XlibWrapper.DoBlue)); + back_color.set_flags((byte) (XConstants.DoRed | XConstants.DoGreen | XConstants.DoBlue)); back_color.set_red((short) (((bcolor >> 16) & 0x000000ff) << 8)); back_color.set_green((short) (((bcolor >> 8) & 0x000000ff) << 8)); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java index a930dfb2be8..aea3baac72b 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -89,7 +89,7 @@ abstract class XDecoratedPeer extends XWindowPeer { // Deny default processing of these events on the shell - proxy will take care of // them instead Long eventMask = (Long)params.get(EVENT_MASK); - params.add(EVENT_MASK, Long.valueOf(eventMask.longValue() & ~(FocusChangeMask | KeyPressMask | KeyReleaseMask))); + params.add(EVENT_MASK, Long.valueOf(eventMask.longValue() & ~(XConstants.FocusChangeMask | XConstants.KeyPressMask | XConstants.KeyReleaseMask))); } void postInit(XCreateWindowParams params) { @@ -131,7 +131,7 @@ abstract class XDecoratedPeer extends XWindowPeer { int minHeight = minimumSize.height - insets.top - insets.bottom; if (minWidth < 0) minWidth = 0; if (minHeight < 0) minHeight = 0; - setSizeHints(XlibWrapper.PMinSize | (isLocationByPlatform()?0:(XlibWrapper.PPosition | XlibWrapper.USPosition)), + setSizeHints(XUtilConstants.PMinSize | (isLocationByPlatform()?0:(XUtilConstants.PPosition | XUtilConstants.USPosition)), getX(), getY(), minWidth, minHeight); if (isVisible()) { Rectangle bounds = getShellBounds(); @@ -143,7 +143,7 @@ abstract class XDecoratedPeer extends XWindowPeer { } } else { boolean isMinSizeSet = isMinSizeSet(); - XWM.removeSizeHints(this, XlibWrapper.PMinSize); + XWM.removeSizeHints(this, XUtilConstants.PMinSize); /* Some WMs need remap to redecorate the window */ if (isMinSizeSet && isShowing() && XWM.needRemap(this)) { /* @@ -365,7 +365,7 @@ abstract class XDecoratedPeer extends XWindowPeer { return; } - if ((getHints().get_flags() & (USPosition | PPosition)) != 0) { + if ((getHints().get_flags() & (XUtilConstants.USPosition | XUtilConstants.PPosition)) != 0) { reshape(dimensions, SET_BOUNDS, false); } else { reshape(dimensions, SET_SIZE, false); @@ -841,10 +841,10 @@ abstract class XDecoratedPeer extends XWindowPeer { setReparented(false); } winAttr.isResizable = resizable; - if ((fs & MWM_FUNC_ALL) != 0) { - fs &= ~(MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE); + if ((fs & MWMConstants.MWM_FUNC_ALL) != 0) { + fs &= ~(MWMConstants.MWM_FUNC_RESIZE | MWMConstants.MWM_FUNC_MAXIMIZE); } else { - fs |= (MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE); + fs |= (MWMConstants.MWM_FUNC_RESIZE | MWMConstants.MWM_FUNC_MAXIMIZE); } winAttr.functions = fs; XWM.setShellResizable(this); @@ -855,10 +855,10 @@ abstract class XDecoratedPeer extends XWindowPeer { setReparented(false); } winAttr.isResizable = resizable; - if ((fs & MWM_FUNC_ALL) != 0) { - fs |= (MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE); + if ((fs & MWMConstants.MWM_FUNC_ALL) != 0) { + fs |= (MWMConstants.MWM_FUNC_RESIZE | MWMConstants.MWM_FUNC_MAXIMIZE); } else { - fs &= ~(MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE); + fs &= ~(MWMConstants.MWM_FUNC_RESIZE | MWMConstants.MWM_FUNC_MAXIMIZE); } winAttr.functions = fs; XWM.setShellNotResizable(this, dimensions, dimensions.getBounds(), false); @@ -936,10 +936,10 @@ abstract class XDecoratedPeer extends XWindowPeer { protected boolean isEventDisabled(XEvent e) { switch (e.get_type()) { // Do not generate MOVED/RESIZED events since we generate them by ourselves - case ConfigureNotify: + case XConstants.ConfigureNotify: return true; - case EnterNotify: - case LeaveNotify: + case XConstants.EnterNotify: + case XConstants.LeaveNotify: // Disable crossing event on outer borders of Frame so // we receive only one set of cross notifications(first set is from content window) return true; @@ -964,7 +964,7 @@ abstract class XDecoratedPeer extends XWindowPeer { if (winAttr.isResizable) { //Fix for 4320050: Minimum size for java.awt.Frame is not being enforced. //We need to update frame's minimum size, not to reset it - XWM.removeSizeHints(this, XlibWrapper.PMaxSize); + XWM.removeSizeHints(this, XUtilConstants.PMaxSize); updateMinimumSize(); } } else { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java index 40822e2c27d..2f81c9fe681 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -51,7 +51,7 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer { } else { winAttr.decorations = winAttr.AWT_DECOR_NONE; } - winAttr.functions = MWM_FUNC_ALL; + winAttr.functions = MWMConstants.MWM_FUNC_ALL; winAttr.isResizable = true; //target.isResizable(); winAttr.initialResizability = target.isResizable(); winAttr.title = target.getTitle(); @@ -100,10 +100,10 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer { int getDecorations() { int d = super.getDecorations(); // remove minimize and maximize buttons for dialogs - if ((d & MWM_DECOR_ALL) != 0) { - d |= (MWM_DECOR_MINIMIZE | MWM_DECOR_MAXIMIZE); + if ((d & MWMConstants.MWM_DECOR_ALL) != 0) { + d |= (MWMConstants.MWM_DECOR_MINIMIZE | MWMConstants.MWM_DECOR_MAXIMIZE); } else { - d &= ~(MWM_DECOR_MINIMIZE | MWM_DECOR_MAXIMIZE); + d &= ~(MWMConstants.MWM_DECOR_MINIMIZE | MWMConstants.MWM_DECOR_MAXIMIZE); } return d; } @@ -111,10 +111,10 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer { int getFunctions() { int f = super.getFunctions(); // remove minimize and maximize functions for dialogs - if ((f & MWM_FUNC_ALL) != 0) { - f |= (MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE); + if ((f & MWMConstants.MWM_FUNC_ALL) != 0) { + f |= (MWMConstants.MWM_FUNC_MINIMIZE | MWMConstants.MWM_FUNC_MAXIMIZE); } else { - f &= ~(MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE); + f &= ~(MWMConstants.MWM_FUNC_MINIMIZE | MWMConstants.MWM_FUNC_MAXIMIZE); } return f; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java index 5c2a329eea6..62ae6219244 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -103,7 +103,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { cleanup(); throw new XException("Cannot write XdndActionList property"); } @@ -124,7 +124,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { cleanup(); throw new XException("Cannot write XdndActionList property"); } @@ -134,7 +134,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { } if (!XDnDConstants.XDnDSelection.setOwner(contents, formatMap, formats, - XlibWrapper.CurrentTime)) { + XConstants.CurrentTime)) { cleanup(); throw new InvalidDnDOperationException("Cannot acquire selection ownership"); } @@ -193,11 +193,11 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { WindowPropertyGetter wpg1 = new WindowPropertyGetter(window, XDnDConstants.XA_XdndAware, 0, 1, - false, XlibWrapper.AnyPropertyType); + false, XConstants.AnyPropertyType); int status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { int targetVersion = (int)Native.getLong(wpg1.getData()); @@ -217,7 +217,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { try { status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg2.getData() != 0 && wpg2.getActualType() == XAtom.XA_WINDOW) { @@ -235,7 +235,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { try { status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || + if (status != XConstants.Success || wpg3.getData() == 0 || wpg3.getActualType() != XAtom.XA_WINDOW || Native.getLong(wpg3.getData()) != proxy) { @@ -246,12 +246,12 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { new WindowPropertyGetter(proxy, XDnDConstants.XA_XdndAware, 0, 1, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || + if (status != XConstants.Success || wpg4.getData() == 0 || wpg4.getActualType() != XAtom.XA_ATOM) { @@ -283,7 +283,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); @@ -297,7 +297,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { msg.set_data(4, formats.length > 2 ? formats[2] : 0); XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -311,7 +311,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndPosition.getAtom()); @@ -322,7 +322,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { msg.set_data(4, XDnDConstants.getXDnDActionForJavaAction(sourceAction)); XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -335,7 +335,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); @@ -346,7 +346,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { msg.set_data(4, 0); XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -361,7 +361,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(getTargetWindow()); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndDrop.getAtom()); @@ -372,7 +372,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { msg.set_data(4, 0); XlibWrapper.XSendEvent(XToolkit.getDisplay(), getTargetProxyWindow(), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { msg.dispose(); @@ -406,7 +406,7 @@ class XDnDDragSourceProtocol extends XDragSourceProtocol { assert XToolkit.isAWTLockHeldByCurrentThread(); XlibWrapper.XSendEvent(XToolkit.getDisplay(), sourceWindow, - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, xclient.pData); return true; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java index 00fe0430d36..5b518321626 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -93,7 +93,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("Cannot write XdndAware property"); } } finally { @@ -119,12 +119,12 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { WindowPropertyGetter wpg1 = new WindowPropertyGetter(embedder, XDnDConstants.XA_XdndAware, 0, 1, - false, XlibWrapper.AnyPropertyType); + false, XConstants.AnyPropertyType); try { status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { overriden = true; @@ -143,7 +143,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { try { status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg2.getData() != 0 && wpg2.getActualType() == XAtom.XA_WINDOW) { @@ -161,7 +161,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { try { status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || + if (status != XConstants.Success || wpg3.getData() == 0 || wpg3.getActualType() != XAtom.XA_WINDOW || Native.getLong(wpg3.getData()) != proxy) { @@ -172,12 +172,12 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { new WindowPropertyGetter(proxy, XDnDConstants.XA_XdndAware, 0, 1, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || + if (status != XConstants.Success || wpg4.getData() == 0 || wpg4.getActualType() != XAtom.XA_ATOM) { @@ -212,7 +212,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != - XlibWrapper.Success) { + XConstants.Success) { throw new XException("Cannot write XdndAware property"); } @@ -226,7 +226,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != - XlibWrapper.Success) { + XConstants.Success) { throw new XException("Cannot write XdndProxy property"); } @@ -239,7 +239,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != - XlibWrapper.Success) { + XConstants.Success) { throw new XException("Cannot write XdndAware property"); } @@ -252,7 +252,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != - XlibWrapper.Success) { + XConstants.Success) { throw new XException("Cannot write XdndProxy property"); } } finally { @@ -285,7 +285,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != - XlibWrapper.Success) { + XConstants.Success) { throw new XException("Cannot write XdndAware property"); } @@ -298,7 +298,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != - XlibWrapper.Success) { + XConstants.Success) { throw new XException("Cannot write XdndProxy property"); } } finally { @@ -326,12 +326,12 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { WindowPropertyGetter wpg1 = new WindowPropertyGetter(embedded, XDnDConstants.XA_XdndAware, 0, 1, - false, XlibWrapper.AnyPropertyType); + false, XConstants.AnyPropertyType); try { status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { overriden = true; @@ -350,7 +350,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { try { status = wpg2.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg2.getData() != 0 && wpg2.getActualType() == XAtom.XA_WINDOW) { @@ -368,7 +368,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { try { status = wpg3.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || + if (status != XConstants.Success || wpg3.getData() == 0 || wpg3.getActualType() != XAtom.XA_WINDOW || Native.getLong(wpg3.getData()) != proxy) { @@ -379,12 +379,12 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { new WindowPropertyGetter(proxy, XDnDConstants.XA_XdndAware, 0, 1, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { status = wpg4.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || + if (status != XConstants.Success || wpg4.getData() == 0 || wpg4.getActualType() != XAtom.XA_ATOM) { @@ -408,12 +408,12 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { WindowPropertyGetter wpg1 = new WindowPropertyGetter(window, XDnDConstants.XA_XdndAware, 0, 1, - false, XlibWrapper.AnyPropertyType); + false, XConstants.AnyPropertyType); try { int status = wpg1.execute(XToolkit.IgnoreBadWindowHandler); - if (status == XlibWrapper.Success && + if (status == XConstants.Success && wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) { return true; @@ -523,7 +523,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { for (int i = 0; i < 3; i++) { long j; - if ((j = xclient.get_data(2 + i)) != XlibWrapper.None) { + if ((j = xclient.get_data(2 + i)) != XConstants.None) { formats3[countFormats++] = j; } } @@ -549,7 +549,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { if (status == 0 || (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { + XToolkit.saved_error.get_error_code() != XConstants.Success)) { throw new XException("XGetWindowAttributes failed"); } @@ -561,12 +561,12 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win, source_win_mask | - XlibWrapper.StructureNotifyMask); + XConstants.StructureNotifyMask); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("XSelectInput failed"); } @@ -581,7 +581,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { } private boolean processXdndPosition(XClientMessageEvent xclient) { - long time_stamp = (int)XlibWrapper.CurrentTime; + long time_stamp = (int)XConstants.CurrentTime; long xdnd_action = 0; int java_action = DnDConstants.ACTION_NONE; int x = 0; @@ -748,7 +748,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { long data3, long data4) { XClientMessageEvent enter = new XClientMessageEvent(); try { - enter.set_type((int)XlibWrapper.ClientMessage); + enter.set_type((int)XConstants.ClientMessage); enter.set_window(toplevel); enter.set_format(32); enter.set_message_type(XDnDConstants.XA_XdndEnter.getAtom()); @@ -774,7 +774,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { long sourceWindow) { XClientMessageEvent leave = new XClientMessageEvent(); try { - leave.set_type((int)XlibWrapper.ClientMessage); + leave.set_type((int)XConstants.ClientMessage); leave.set_window(toplevel); leave.set_format(32); leave.set_message_type(XDnDConstants.XA_XdndLeave.getAtom()); @@ -804,7 +804,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(xclient.get_data(0)); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndStatus.getAtom()); @@ -826,7 +826,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), xclient.get_data(0), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { XToolkit.awtUnlock(); @@ -842,7 +842,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { throws IllegalArgumentException, IOException { XClientMessageEvent xclient = new XClientMessageEvent(ctxt); long message_type = xclient.get_message_type(); - long time_stamp = XlibWrapper.CurrentTime; + long time_stamp = XConstants.CurrentTime; // NOTE: we assume that the source supports at least version 1, so we // can use the time stamp @@ -892,7 +892,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XClientMessageEvent msg = new XClientMessageEvent(); try { - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(xclient.get_data(0)); msg.set_format(32); msg.set_message_type(XDnDConstants.XA_XdndFinished.getAtom()); @@ -914,7 +914,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), xclient.get_data(0), - false, XlibWrapper.NoEventMask, + false, XConstants.NoEventMask, msg.pData); } finally { XToolkit.awtUnlock(); @@ -1119,7 +1119,7 @@ class XDnDDropTargetProtocol extends XDropTargetProtocol { XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { if (logger.isLoggable(Level.WARNING)) { logger.warning("Cannot set XdndTypeList on the proxy window"); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java index 48ecd886c21..af3a3219cff 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceContextPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -55,11 +55,11 @@ public final class XDragSourceContextPeer Logger.getLogger("sun.awt.X11.xembed.xdnd.XDragSourceContextPeer"); /* The events selected on the root window when the drag begins. */ - private static final int ROOT_EVENT_MASK = (int)XlibWrapper.ButtonMotionMask | - (int)XlibWrapper.KeyPressMask | (int)XlibWrapper.KeyReleaseMask; + private static final int ROOT_EVENT_MASK = (int)XConstants.ButtonMotionMask | + (int)XConstants.KeyPressMask | (int)XConstants.KeyReleaseMask; /* The events to be delivered during grab. */ - private static final int GRAB_EVENT_MASK = (int)XlibWrapper.ButtonPressMask | - (int)XlibWrapper.ButtonMotionMask | (int)XlibWrapper.ButtonReleaseMask; + private static final int GRAB_EVENT_MASK = (int)XConstants.ButtonPressMask | + (int)XConstants.ButtonMotionMask | (int)XConstants.ButtonReleaseMask; /* The event mask of the root window before the drag operation starts. */ private long rootEventMask = 0; @@ -196,11 +196,11 @@ public final class XDragSourceContextPeer status = XlibWrapper.XGrabPointer(XToolkit.getDisplay(), rootWindow, 0, GRAB_EVENT_MASK, - XlibWrapper.GrabModeAsync, - XlibWrapper.GrabModeAsync, - XlibWrapper.None, xcursor, timeStamp); + XConstants.GrabModeAsync, + XConstants.GrabModeAsync, + XConstants.None, xcursor, timeStamp); - if (status != XlibWrapper.GrabSuccess) { + if (status != XConstants.GrabSuccess) { cleanup(timeStamp); throwGrabFailureException("Cannot grab pointer", status); return; @@ -208,11 +208,11 @@ public final class XDragSourceContextPeer status = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(), rootWindow, 0, - XlibWrapper.GrabModeAsync, - XlibWrapper.GrabModeAsync, + XConstants.GrabModeAsync, + XConstants.GrabModeAsync, timeStamp); - if (status != XlibWrapper.GrabSuccess) { + if (status != XConstants.GrabSuccess) { cleanup(timeStamp); throwGrabFailureException("Cannot grab keyboard", status); return; @@ -276,7 +276,7 @@ public final class XDragSourceContextPeer XlibWrapper.XChangeActivePointerGrab(XToolkit.getDisplay(), GRAB_EVENT_MASK, xcursor, - XlibWrapper.CurrentTime); + XConstants.CurrentTime); } protected boolean needsBogusExitBeforeDrop() { @@ -287,10 +287,10 @@ public final class XDragSourceContextPeer throws InvalidDnDOperationException { String msgCause = ""; switch (grabStatus) { - case XlibWrapper.GrabNotViewable: msgCause = "not viewable"; break; - case XlibWrapper.AlreadyGrabbed: msgCause = "already grabbed"; break; - case XlibWrapper.GrabInvalidTime: msgCause = "invalid time"; break; - case XlibWrapper.GrabFrozen: msgCause = "grab frozen"; break; + case XConstants.GrabNotViewable: msgCause = "not viewable"; break; + case XConstants.AlreadyGrabbed: msgCause = "already grabbed"; break; + case XConstants.GrabInvalidTime: msgCause = "invalid time"; break; + case XConstants.GrabFrozen: msgCause = "grab frozen"; break; default: msgCause = "unknown failure"; break; } throw new InvalidDnDOperationException(msg + ": " + msgCause); @@ -537,7 +537,7 @@ public final class XDragSourceContextPeer return false; } - if (ev.get_type() != (int)XlibWrapper.ClientMessage) { + if (ev.get_type() != (int)XConstants.ClientMessage) { return false; } @@ -579,18 +579,18 @@ public final class XDragSourceContextPeer } switch (ev.get_type()) { - case XlibWrapper.ClientMessage: { + case XConstants.ClientMessage: { XClientMessageEvent xclient = ev.get_xclient(); return processClientMessage(xclient); } - case XlibWrapper.DestroyNotify: { + case XConstants.DestroyNotify: { XDestroyWindowEvent xde = ev.get_xdestroywindow(); /* Target crashed during drop processing - cleanup. */ if (!dragInProgress && dragProtocol != null && xde.get_window() == dragProtocol.getTargetWindow()) { - cleanup(XlibWrapper.CurrentTime); + cleanup(XConstants.CurrentTime); return true; } /* Pass along */ @@ -604,14 +604,14 @@ public final class XDragSourceContextPeer /* Process drag-only messages. */ switch (ev.get_type()) { - case XlibWrapper.KeyRelease: - case XlibWrapper.KeyPress: { + case XConstants.KeyRelease: + case XConstants.KeyPress: { XKeyEvent xkey = ev.get_xkey(); long keysym = XlibWrapper.XKeycodeToKeysym(XToolkit.getDisplay(), xkey.get_keycode(), 0); switch ((int)keysym) { case (int)XKeySymConstants.XK_Escape: { - if (ev.get_type() == (int)XlibWrapper.KeyRelease) { + if (ev.get_type() == (int)XConstants.KeyRelease) { cleanup(xkey.get_time()); } break; @@ -631,7 +631,7 @@ public final class XDragSourceContextPeer XlibWrapper.larg7); // modifiers XMotionEvent xmotion = new XMotionEvent(); try { - xmotion.set_type(XlibWrapper.MotionNotify); + xmotion.set_type(XConstants.MotionNotify); xmotion.set_serial(xkey.get_serial()); xmotion.set_send_event(xkey.get_send_event()); xmotion.set_display(xkey.get_display()); @@ -658,12 +658,12 @@ public final class XDragSourceContextPeer } return true; } - case XlibWrapper.ButtonPress: + case XConstants.ButtonPress: return true; - case XlibWrapper.MotionNotify: + case XConstants.MotionNotify: processMouseMove(ev.get_xmotion()); return true; - case XlibWrapper.ButtonRelease: { + case XConstants.ButtonRelease: { XButtonEvent xbutton = ev.get_xbutton(); /* * On some X servers it could happen that ButtonRelease coordinates @@ -672,7 +672,7 @@ public final class XDragSourceContextPeer */ XMotionEvent xmotion = new XMotionEvent(); try { - xmotion.set_type(XlibWrapper.MotionNotify); + xmotion.set_type(XConstants.MotionNotify); xmotion.set_serial(xbutton.get_serial()); xmotion.set_send_event(xbutton.get_send_event()); xmotion.set_display(xbutton.get_display()); @@ -694,8 +694,8 @@ public final class XDragSourceContextPeer } finally { xmotion.dispose(); } - if (xbutton.get_button() == XlibWrapper.Button1 - || xbutton.get_button() == XlibWrapper.Button2) { + if (xbutton.get_button() == XConstants.Button1 + || xbutton.get_button() == XConstants.Button2) { // drag is initiated with Button1 or Button2 pressed and // ended on release of either of these buttons (as the same // behavior was with our old Motif DnD-based implementation) @@ -789,6 +789,6 @@ public final class XDragSourceContextPeer dragDropFinished(success, action, x, y); dndInProgress = false; - cleanup(XlibWrapper.CurrentTime); + cleanup(XConstants.CurrentTime); } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java index baf58c48d26..40a7b045834 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -189,7 +189,7 @@ abstract class XDragSourceProtocol { if (status == 0 || (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { + XToolkit.saved_error.get_error_code() != XConstants.Success)) { throw new XException("XGetWindowAttributes failed"); } @@ -201,12 +201,12 @@ abstract class XDragSourceProtocol { XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); XlibWrapper.XSelectInput(XToolkit.getDisplay(), targetWindow, targetWindowMask | - XlibWrapper.StructureNotifyMask); + XConstants.StructureNotifyMask); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("XSelectInput failed"); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java index 23bdf39a202..d8d6c25d16f 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetEventProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -43,7 +43,7 @@ final class XDropTargetEventProcessor { private XDropTargetEventProcessor() {} private boolean doProcessEvent(XEvent ev) { - if (ev.get_type() == (int)XlibWrapper.DestroyNotify && + if (ev.get_type() == (int)XConstants.DestroyNotify && protocol != null && ev.get_xany().get_window() == protocol.getSourceWindow()) { protocol.cleanup(); @@ -51,7 +51,7 @@ final class XDropTargetEventProcessor { return false; } - if (ev.get_type() == (int)XlibWrapper.PropertyNotify) { + if (ev.get_type() == (int)XConstants.PropertyNotify) { XPropertyEvent xproperty = ev.get_xproperty(); if (xproperty.get_atom() == MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom()) { @@ -60,7 +60,7 @@ final class XDropTargetEventProcessor { } } - if (ev.get_type() != (int)XlibWrapper.ClientMessage) { + if (ev.get_type() != (int)XConstants.ClientMessage) { return false; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java index 658b7cbf3d5..7a7c7c10ee2 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -149,7 +149,7 @@ abstract class XDropTargetProtocol { XToolkit.awtLock(); try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), proxy, false, - XlibWrapper.NoEventMask, xclient.pData); + XConstants.NoEventMask, xclient.pData); } finally { XToolkit.awtUnlock(); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java index 2d05578dd04..47353e03ebe 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -27,18 +27,14 @@ package sun.awt.X11; import java.util.ArrayList; import java.util.Collections; -import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; -import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.logging.*; import java.awt.Point; -import sun.awt.dnd.SunDropTargetContextPeer; -import sun.awt.dnd.SunDropTargetEvent; /** * The class responsible for registration/deregistration of drop sites. @@ -179,11 +175,11 @@ final class XDropTargetRegistry { if (status == 0 || (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { + XToolkit.saved_error.get_error_code() != XConstants.Success)) { continue; } - if (wattr.get_map_state() != XlibWrapper.IsUnmapped + if (wattr.get_map_state() != XConstants.IsUnmapped && dest_x < wattr.get_width() && dest_y < wattr.get_height()) { return window; @@ -233,7 +229,7 @@ final class XDropTargetRegistry { if (status == 0 || (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { + XToolkit.saved_error.get_error_code() != XConstants.Success)) { throw new XException("XGetWindowAttributes failed"); } @@ -243,14 +239,14 @@ final class XDropTargetRegistry { wattr.dispose(); } - if ((event_mask & XlibWrapper.PropertyChangeMask) == 0) { + if ((event_mask & XConstants.PropertyChangeMask) == 0) { XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); XlibWrapper.XSelectInput(XToolkit.getDisplay(), embedder, - event_mask | XlibWrapper.PropertyChangeMask); + event_mask | XConstants.PropertyChangeMask); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("XSelectInput failed"); } } @@ -397,14 +393,14 @@ final class XDropTargetRegistry { long event_mask = entry.getEventMask(); /* Restore the original event mask for the embedder. */ - if ((event_mask & XlibWrapper.PropertyChangeMask) == 0) { + if ((event_mask & XConstants.PropertyChangeMask) == 0) { XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler); XlibWrapper.XSelectInput(XToolkit.getDisplay(), embedder, event_mask); XToolkit.RESTORE_XERROR_HANDLER(); if (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + XToolkit.saved_error.get_error_code() != XConstants.Success) { throw new XException("XSelectInput failed"); } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java index 10b71a453b4..3d2c25658c4 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -81,10 +81,10 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener super.preInit(params); params.put(EVENT_MASK, - KeyPressMask | KeyReleaseMask - | FocusChangeMask | ButtonPressMask | ButtonReleaseMask - | EnterWindowMask | LeaveWindowMask | PointerMotionMask - | ButtonMotionMask | ExposureMask | StructureNotifyMask | SubstructureNotifyMask); + XConstants.KeyPressMask | XConstants.KeyReleaseMask + | XConstants.FocusChangeMask | XConstants.ButtonPressMask | XConstants.ButtonReleaseMask + | XConstants.EnterWindowMask | XConstants.LeaveWindowMask | XConstants.PointerMotionMask + | XConstants.ButtonMotionMask | XConstants.ExposureMask | XConstants.StructureNotifyMask | XConstants.SubstructureNotifyMask); } @@ -134,7 +134,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener try { XToolkit.addEventDispatcher(xembed.handle, xembed); XlibWrapper.XSelectInput(XToolkit.getDisplay(), xembed.handle, - XlibWrapper.StructureNotifyMask | XlibWrapper.PropertyChangeMask); + XConstants.StructureNotifyMask | XConstants.PropertyChangeMask); XDropTargetRegistry.getRegistry().registerXEmbedClient(getWindow(), xembed.handle); } finally { @@ -194,7 +194,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener public void dispatchEvent(XEvent ev) { super.dispatchEvent(ev); switch (ev.get_type()) { - case CreateNotify: + case XConstants.CreateNotify: XCreateWindowEvent cr = ev.get_xcreatewindow(); if (xembedLog.isLoggable(Level.FINEST)) { xembedLog.finest("Message on embedder: " + cr); @@ -205,7 +205,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener } embedChild(cr.get_window()); break; - case DestroyNotify: + case XConstants.DestroyNotify: XDestroyWindowEvent dn = ev.get_xdestroywindow(); if (xembedLog.isLoggable(Level.FINEST)) { xembedLog.finest("Message on embedder: " + dn); @@ -215,7 +215,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener } childDestroyed(); break; - case ReparentNotify: + case XConstants.ReparentNotify: XReparentEvent rep = ev.get_xreparent(); if (xembedLog.isLoggable(Level.FINEST)) { xembedLog.finest("Message on embedder: " + rep); @@ -309,7 +309,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener if (status == 0 || (XToolkit.saved_error != null && - XToolkit.saved_error.get_error_code() != XlibWrapper.Success)) { + XToolkit.saved_error.get_error_code() != XConstants.Success)) { return null; } @@ -480,7 +480,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener if (xembedLog.isLoggable(Level.FINE)) xembedLog.fine("Forwarding native key event: " + ke); XToolkit.awtLock(); try { - XlibWrapper.XSendEvent(XToolkit.getDisplay(), xembed.handle, false, XlibWrapper.NoEventMask, data); + XlibWrapper.XSendEvent(XToolkit.getDisplay(), xembed.handle, false, XConstants.NoEventMask, data); } finally { XToolkit.awtUnlock(); } @@ -742,7 +742,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener version = Native.getCard32(xembed_info_data, 0); flags = Native.getCard32(xembed_info_data, 1); boolean new_mapped = (flags & XEMBED_MAPPED) != 0; - boolean currently_mapped = XlibUtil.getWindowMapState(handle) != XlibWrapper.IsUnmapped; + boolean currently_mapped = XlibUtil.getWindowMapState(handle) != XConstants.IsUnmapped; if (new_mapped != currently_mapped) { if (xembedLog.isLoggable(Level.FINER)) xembedLog.fine("Mapping state of the client has changed, old state: " + currently_mapped + ", new state: " + new_mapped); @@ -803,13 +803,13 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener public void dispatchEvent(XEvent xev) { int type = xev.get_type(); switch (type) { - case PropertyNotify: + case XConstants.PropertyNotify: handlePropertyNotify(xev); break; - case ConfigureNotify: + case XConstants.ConfigureNotify: handleConfigureNotify(xev); break; - case ClientMessage: + case XConstants.ClientMessage: handleClientMessage(xev); break; } @@ -844,7 +844,7 @@ public class XEmbedCanvasPeer extends XCanvasPeer implements WindowFocusListener XKeyEvent ke = new XKeyEvent(data); // We recognize only these masks - modifiers = ke.get_state() & (ShiftMask | ControlMask | LockMask); + modifiers = ke.get_state() & (XConstants.ShiftMask | XConstants.ControlMask | XConstants.LockMask); if (xembedLog.isLoggable(Level.FINEST)) xembedLog.finest("Mapped " + e + " to " + this); } finally { XlibWrapper.unsafe.freeMemory(data); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java index 7e6ae054a87..b2a342757bd 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -53,7 +53,7 @@ public class XEmbedChildProxyPeer implements ComponentPeer, XEventDispatcher{ try { XToolkit.addEventDispatcher(handle, this); XlibWrapper.XSelectInput(XToolkit.getDisplay(), handle, - XlibWrapper.StructureNotifyMask | XlibWrapper.PropertyChangeMask); + XConstants.StructureNotifyMask | XConstants.PropertyChangeMask); } finally { XToolkit.awtUnlock(); @@ -341,10 +341,10 @@ public class XEmbedChildProxyPeer implements ComponentPeer, XEventDispatcher{ public void dispatchEvent(XEvent xev) { int type = xev.get_type(); switch (type) { - case XlibWrapper.PropertyNotify: + case XConstants.PropertyNotify: handlePropertyNotify(xev); break; - case XlibWrapper.ConfigureNotify: + case XConstants.ConfigureNotify: handleConfigureNotify(xev); break; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java index c56883e46af..139f375fa40 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedClientHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -145,10 +145,10 @@ public class XEmbedClientHelper extends XEmbedHelper implements XEventDispatcher public void dispatchEvent(XEvent xev) { switch(xev.get_type()) { - case XlibWrapper.ClientMessage: + case XConstants.ClientMessage: handleClientMessage(xev); break; - case XlibWrapper.ReparentNotify: + case XConstants.ReparentNotify: handleReparentNotify(xev); break; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java index aab78552007..4b3c7d9fd88 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -94,7 +94,7 @@ public class XEmbedHelper { } void sendMessage(long window, int message, long detail, long data1, long data2) { XClientMessageEvent msg = new XClientMessageEvent(); - msg.set_type((int)XlibWrapper.ClientMessage); + msg.set_type((int)XConstants.ClientMessage); msg.set_window(window); msg.set_message_type(XEmbed.getAtom()); msg.set_format(32); @@ -106,7 +106,7 @@ public class XEmbedHelper { XToolkit.awtLock(); try { if (xembedLog.isLoggable(Level.FINE)) xembedLog.fine("Sending " + XEmbedMessageToString(msg)); - XlibWrapper.XSendEvent(XToolkit.getDisplay(), window, false, XlibWrapper.NoEventMask, msg.pData); + XlibWrapper.XSendEvent(XToolkit.getDisplay(), window, false, XConstants.NoEventMask, msg.pData); } finally { XToolkit.awtUnlock(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java index 28fd3c2246a..932f8bd31d6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedServerTester.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -260,7 +260,7 @@ public class XEmbedServerTester implements XEventDispatcher { mapped = 0; embedCompletely(); sleep(1000); - if (XlibUtil.getWindowMapState(window.getWindow()) != XlibWrapper.IsUnmapped) { + if (XlibUtil.getWindowMapState(window.getWindow()) != IsUnmapped) { throw new RuntimeException("Client has been mapped"); } } @@ -613,12 +613,12 @@ public class XEmbedServerTester implements XEventDispatcher { } } private void checkMapped() { - if (XlibUtil.getWindowMapState(window.getWindow()) == XlibWrapper.IsUnmapped) { + if (XlibUtil.getWindowMapState(window.getWindow()) == IsUnmapped) { throw new RuntimeException("Client is not mapped"); } } private void checkNotMapped() { - if (XlibUtil.getWindowMapState(window.getWindow()) != XlibWrapper.IsUnmapped) { + if (XlibUtil.getWindowMapState(window.getWindow()) != IsUnmapped) { throw new RuntimeException("Client is mapped"); } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbeddedFramePeer.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbeddedFramePeer.java index b0cb3aa6d07..90eb7ff8ddc 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbeddedFramePeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbeddedFramePeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -114,8 +114,8 @@ public class XEmbeddedFramePeer extends XFramePeer { protected boolean isEventDisabled(XEvent e) { if (embedder != null && embedder.isActive()) { switch (e.get_type()) { - case FocusIn: - case FocusOut: + case XConstants.FocusIn: + case XConstants.FocusOut: return true; } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XEmbeddingContainer.java b/jdk/src/solaris/classes/sun/awt/X11/XEmbeddingContainer.java index e5d5bed6bac..763729800c3 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbeddingContainer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbeddingContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -121,7 +121,7 @@ public class XEmbeddingContainer extends XEmbedHelper implements XEventDispatche } public void dispatchEvent(XEvent xev) { switch(xev.get_type()) { - case XlibWrapper.ClientMessage: + case XConstants.ClientMessage: handleClientMessage(xev); break; } @@ -149,7 +149,7 @@ public class XEmbeddingContainer extends XEmbedHelper implements XEventDispatche ke.set_window(child); XToolkit.awtLock(); try { - XlibWrapper.XSendEvent(XToolkit.getDisplay(), child, false, XlibWrapper.NoEventMask, data); + XlibWrapper.XSendEvent(XToolkit.getDisplay(), child, false, XConstants.NoEventMask, data); } finally { XToolkit.awtUnlock(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFocusProxyWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XFocusProxyWindow.java index 045d10687d3..361ef87eeb6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFocusProxyWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFocusProxyWindow.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -41,7 +41,7 @@ public class XFocusProxyWindow extends XBaseWindow { super(new XCreateWindowParams(new Object[] { BOUNDS, new Rectangle(-1, -1, 1, 1), PARENT_WINDOW, new Long(owner.getWindow()), - EVENT_MASK, new Long(FocusChangeMask | KeyPressMask | KeyReleaseMask) + EVENT_MASK, new Long(XConstants.FocusChangeMask | XConstants.KeyPressMask | XConstants.KeyReleaseMask) })); this.owner = owner; } @@ -67,8 +67,8 @@ public class XFocusProxyWindow extends XBaseWindow { int type = ev.get_type(); switch (type) { - case XlibWrapper.FocusIn: - case XlibWrapper.FocusOut: + case XConstants.FocusIn: + case XConstants.FocusOut: handleFocusEvent(ev); break; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java index 28989acc609..9493b453feb 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java @@ -37,7 +37,7 @@ import java.awt.peer.FramePeer; import java.util.logging.Level; import java.util.logging.Logger; -class XFramePeer extends XDecoratedPeer implements FramePeer, XConstants { +class XFramePeer extends XDecoratedPeer implements FramePeer { private static Logger log = Logger.getLogger("sun.awt.X11.XFramePeer"); private static Logger stateLog = Logger.getLogger("sun.awt.X11.states"); private static Logger insLog = Logger.getLogger("sun.awt.X11.insets.XFramePeer"); @@ -71,7 +71,7 @@ class XFramePeer extends XDecoratedPeer implements FramePeer, XConstants { } else { winAttr.decorations = winAttr.AWT_DECOR_NONE; } - winAttr.functions = MWM_FUNC_ALL; + winAttr.functions = MWMConstants.MWM_FUNC_ALL; winAttr.isResizable = true; // target.isResizable(); winAttr.title = target.getTitle(); winAttr.initialResizability = target.isResizable(); @@ -109,9 +109,9 @@ class XFramePeer extends XDecoratedPeer implements FramePeer, XConstants { state = winAttr.initialState; } if ((state & Frame.ICONIFIED) != 0) { - setInitialState(IconicState); + setInitialState(XUtilConstants.IconicState); } else { - setInitialState(NormalState); + setInitialState(XUtilConstants.NormalState); } setExtendedState(state); } @@ -221,7 +221,7 @@ class XFramePeer extends XDecoratedPeer implements FramePeer, XConstants { XToolkit.awtLock(); try { XSizeHints hints = getHints(); - hints.set_flags(hints.get_flags() | (int)XlibWrapper.PMaxSize); + hints.set_flags(hints.get_flags() | (int)XUtilConstants.PMaxSize); if (b.width != Integer.MAX_VALUE) { hints.set_max_width(b.width); } else { @@ -344,7 +344,7 @@ class XFramePeer extends XDecoratedPeer implements FramePeer, XConstants { XToolkit.awtLock(); try { XWMHints hints = getWMHints(); - hints.set_flags((int)XlibWrapper.StateHint | hints.get_flags()); + hints.set_flags((int)XUtilConstants.StateHint | hints.get_flags()); hints.set_initial_state(wm_state); if (stateLog.isLoggable(Level.FINE)) stateLog.fine("Setting initial WM state on " + this + " to " + wm_state); XlibWrapper.XSetWMHints(XToolkit.getDisplay(), getWindow(), hints.pData); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java index eae5bbc2f5f..43ae1f89004 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XGlobalCursorManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -229,46 +229,46 @@ public final class XGlobalCursorManager extends GlobalCursorManager { int cursorType = 0; switch (type) { case Cursor.DEFAULT_CURSOR: - cursorType = XlibWrapper.XC_left_ptr; + cursorType = XCursorFontConstants.XC_left_ptr; break; case Cursor.CROSSHAIR_CURSOR: - cursorType = XlibWrapper.XC_crosshair; + cursorType = XCursorFontConstants.XC_crosshair; break; case Cursor.TEXT_CURSOR: - cursorType = XlibWrapper.XC_xterm; + cursorType = XCursorFontConstants.XC_xterm; break; case Cursor.WAIT_CURSOR: - cursorType = XlibWrapper.XC_watch; + cursorType = XCursorFontConstants.XC_watch; break; case Cursor.SW_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_bottom_left_corner; + cursorType = XCursorFontConstants.XC_bottom_left_corner; break; case Cursor.NW_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_top_left_corner; + cursorType = XCursorFontConstants.XC_top_left_corner; break; case Cursor.SE_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_bottom_right_corner; + cursorType = XCursorFontConstants.XC_bottom_right_corner; break; case Cursor.NE_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_top_right_corner; + cursorType = XCursorFontConstants.XC_top_right_corner; break; case Cursor.S_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_bottom_side; + cursorType = XCursorFontConstants.XC_bottom_side; break; case Cursor.N_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_top_side; + cursorType = XCursorFontConstants.XC_top_side; break; case Cursor.W_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_left_side; + cursorType = XCursorFontConstants.XC_left_side; break; case Cursor.E_RESIZE_CURSOR: - cursorType = XlibWrapper.XC_right_side; + cursorType = XCursorFontConstants.XC_right_side; break; case Cursor.HAND_CURSOR: - cursorType = XlibWrapper.XC_hand2; + cursorType = XCursorFontConstants.XC_hand2; break; case Cursor.MOVE_CURSOR: - cursorType = XlibWrapper.XC_fleur; + cursorType = XCursorFontConstants.XC_fleur; break; } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java index eab55f6b5fc..a6211a0e0b6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XIconWindow.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -293,7 +293,7 @@ public class XIconWindow extends XBaseWindow { long dst = XlibWrapper.XCreateImage(XToolkit.getDisplay(), visInfo.get_visual(), (int)awtImage.get_Depth(), - (int)XlibWrapper.ZPixmap, + (int)XConstants.ZPixmap, 0, bytes, iconWidth, @@ -470,9 +470,9 @@ public class XIconWindow extends XBaseWindow { params.add(BACKGROUND_PIXMAP, iconPixmap); params.add(COLORMAP, adata.get_awt_cmap()); params.add(DEPTH, awtImage.get_Depth()); - params.add(VISUAL_CLASS, (int)XlibWrapper.InputOutput); + params.add(VISUAL_CLASS, (int)XConstants.InputOutput); params.add(VISUAL, visInfo.get_visual()); - params.add(VALUE_MASK, XlibWrapper.CWBorderPixel | XlibWrapper.CWColormap | XlibWrapper.CWBackPixmap); + params.add(VALUE_MASK, XConstants.CWBorderPixel | XConstants.CWColormap | XConstants.CWBackPixmap); params.add(PARENT_WINDOW, XlibWrapper.RootWindow(XToolkit.getDisplay(), visInfo.get_screen())); params.add(BOUNDS, new Rectangle(0, 0, iconWidth, iconHeight)); params.remove(DELAYED); @@ -488,9 +488,9 @@ public class XIconWindow extends XBaseWindow { XlibWrapper.XClearWindow(XToolkit.getDisplay(), getWindow()); } // Provide both pixmap and window, WM or Taskbar will use the one they find more appropriate - long newFlags = hints.get_flags() | XlibWrapper.IconPixmapHint | XlibWrapper.IconMaskHint; + long newFlags = hints.get_flags() | XUtilConstants.IconPixmapHint | XUtilConstants.IconMaskHint; if (getWindow() != 0) { - newFlags |= XlibWrapper.IconWindowHint; + newFlags |= XUtilConstants.IconWindowHint; } hints.set_flags(newFlags); hints.set_icon_pixmap(iconPixmap); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XMSelection.java b/jdk/src/solaris/classes/sun/awt/X11/XMSelection.java index 9d7059a8d05..8fb4f4bf3c0 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XMSelection.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XMSelection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -98,7 +98,7 @@ public class XMSelection { XToolkit.awtLock(); try { long root = XlibWrapper.RootWindow(display,screen); - XlibWrapper.XSelectInput(display, root, XlibWrapper.StructureNotifyMask); + XlibWrapper.XSelectInput(display, root, XConstants.StructureNotifyMask); XToolkit.addEventDispatcher(root, new XEventDispatcher() { public void dispatchEvent(XEvent ev) { @@ -130,7 +130,7 @@ public class XMSelection { synchronized(this) { setOwner(owner, screen); if (log.isLoggable(Level.FINE)) log.fine("New Selection Owner for screen " + screen + " = " + owner ); - XlibWrapper.XSelectInput(display, owner, XlibWrapper.StructureNotifyMask | eventMask); + XlibWrapper.XSelectInput(display, owner, XConstants.StructureNotifyMask | eventMask); XToolkit.addEventDispatcher(owner, new XEventDispatcher() { public void dispatchEvent(XEvent ev) { @@ -162,7 +162,7 @@ public class XMSelection { if (owner != 0) { setOwner(owner, screen); if (log.isLoggable(Level.FINE)) log.fine("Selection Owner for screen " + screen + " = " + owner ); - XlibWrapper.XSelectInput(display, owner, XlibWrapper.StructureNotifyMask | extra_mask); + XlibWrapper.XSelectInput(display, owner, XConstants.StructureNotifyMask | extra_mask); XToolkit.addEventDispatcher(owner, new XEventDispatcher() { public void dispatchEvent(XEvent ev) { @@ -205,7 +205,7 @@ public class XMSelection { static boolean processRootEvent(XEvent xev, int screen) { switch (xev.get_type()) { - case XlibWrapper.ClientMessage: { + case XConstants.ClientMessage: { return processClientMessage(xev, screen); } } @@ -225,7 +225,7 @@ public class XMSelection { */ public XMSelection (String selname) { - this(selname, XlibWrapper.PropertyChangeMask); + this(selname, XConstants.PropertyChangeMask); } @@ -319,11 +319,11 @@ public class XMSelection { void dispatchSelectionEvent(XEvent xev, int screen) { if (log.isLoggable(Level.FINE)) log.fine("Event =" + xev); - if (xev.get_type() == XlibWrapper.DestroyNotify) { + if (xev.get_type() == XConstants.DestroyNotify) { XDestroyWindowEvent de = xev.get_xdestroywindow(); dispatchOwnerDeath( de, screen); } - else if (xev.get_type() == XlibWrapper.PropertyNotify) { + else if (xev.get_type() == XConstants.PropertyNotify) { XPropertyEvent xpe = xev.get_xproperty(); dispatchSelectionChanged( xpe, screen); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java index f61c476e57e..ccc1b124204 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java @@ -99,7 +99,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt return; } if (log.isLoggable(Level.FINE)) log.fine("Requesting state on " + window + " for " + state); - req.set_type((int)XlibWrapper.ClientMessage); + req.set_type((int)XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); @@ -109,7 +109,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt XlibWrapper.XSendEvent(XToolkit.getDisplay(), XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()), false, - XlibWrapper.SubstructureRedirectMask | XlibWrapper.SubstructureNotifyMask, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, req.pData); } finally { @@ -183,7 +183,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt if (window.isShowing()) { XClientMessageEvent req = new XClientMessageEvent(); try { - req.set_type((int)XlibWrapper.ClientMessage); + req.set_type((int)XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_NET_WM_STATE.getAtom()); req.set_format(32); @@ -195,7 +195,7 @@ final class XNETProtocol extends XProtocol implements XStateProtocol, XLayerProt XlibWrapper.XSendEvent(XToolkit.getDisplay(), XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()), false, - XlibWrapper.SubstructureRedirectMask | XlibWrapper.SubstructureNotifyMask, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, req.pData); } finally { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XProtocol.java index 34c900ed4d0..1fb3de9fa31 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -42,7 +42,7 @@ class XProtocol { static XToolkit.XErrorHandler VerifyChangePropertyHandler = new XToolkit.XErrorHandler() { public int handleError(long display, XErrorEvent err) { XToolkit.XERROR_SAVE(err); - if (err.get_request_code() == XlibWrapper.X_ChangeProperty) { + if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) { return 0; } else { return XToolkit.SAVED_ERROR_HANDLER(display, err); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XProtocolConstants.java b/jdk/src/solaris/classes/sun/awt/X11/XProtocolConstants.java index 475a348fc69..70aae76064c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XProtocolConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XProtocolConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -25,7 +25,10 @@ package sun.awt.X11; -public interface XProtocolConstants { +final public class XProtocolConstants { + + private XProtocolConstants(){} + /* Reply codes */ public static final int X_Reply = 1 ; /* Normal reply */ public static final int X_Error = 0 ; /* Error */ diff --git a/jdk/src/solaris/classes/sun/awt/X11/XSelection.java b/jdk/src/solaris/classes/sun/awt/X11/XSelection.java index b472bec7646..0e7a8aafdc0 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XSelection.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XSelection.java @@ -141,7 +141,7 @@ public final class XSelection { long selection = selectionAtom.getAtom(); // ICCCM prescribes that CurrentTime should not be used for SetSelectionOwner. - if (time == XlibWrapper.CurrentTime) { + if (time == XConstants.CurrentTime) { time = XToolkit.getCurrentServerTime(); } @@ -199,7 +199,7 @@ public final class XSelection { WindowPropertyGetter targetsGetter = new WindowPropertyGetter(XWindow.getXAWTRootWindow().getWindow(), selectionPropertyAtom, 0, MAX_LENGTH, - true, XlibWrapper.AnyPropertyType); + true, XConstants.AnyPropertyType); try { XToolkit.awtLock(); @@ -274,7 +274,7 @@ public final class XSelection { new WindowPropertyGetter(XWindow.getXAWTRootWindow().getWindow(), selectionPropertyAtom, 0, MAX_LENGTH, false, // don't delete to handle INCR properly. - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { XToolkit.awtLock(); @@ -353,7 +353,7 @@ public final class XSelection { new WindowPropertyGetter(XWindow.getXAWTRootWindow().getWindow(), selectionPropertyAtom, 0, MAX_LENGTH, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { XToolkit.awtLock(); @@ -520,7 +520,7 @@ public final class XSelection { try { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), requestor, property, format, dataFormat, - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, nativeDataPtr, count); } finally { XToolkit.awtUnlock(); @@ -543,14 +543,14 @@ public final class XSelection { boolean conversionSucceeded = false; if (ownershipTime != 0 && - (requestTime == XlibWrapper.CurrentTime || requestTime >= ownershipTime)) + (requestTime == XConstants.CurrentTime || requestTime >= ownershipTime)) { // Handle MULTIPLE requests as per ICCCM. if (format == XDataTransferer.MULTIPLE_ATOM.getAtom()) { conversionSucceeded = handleMultipleRequest(requestor, property); } else { // Support for obsolete clients as per ICCCM. - if (property == XlibWrapper.None) { + if (property == XConstants.None) { property = format; } @@ -564,12 +564,12 @@ public final class XSelection { if (!conversionSucceeded) { // None property indicates conversion failure. - property = XlibWrapper.None; + property = XConstants.None; } XSelectionEvent xse = new XSelectionEvent(); try { - xse.set_type(XlibWrapper.SelectionNotify); + xse.set_type(XConstants.SelectionNotify); xse.set_send_event(true); xse.set_requestor(requestor); xse.set_selection(selectionAtom.getAtom()); @@ -580,7 +580,7 @@ public final class XSelection { XToolkit.awtLock(); try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), requestor, false, - XlibWrapper.NoEventMask, xse.pData); + XConstants.NoEventMask, xse.pData); } finally { XToolkit.awtUnlock(); } @@ -590,7 +590,7 @@ public final class XSelection { } private boolean handleMultipleRequest(final long requestor, long property) { - if (XlibWrapper.None == property) { + if (XConstants.None == property) { // The property cannot be None for a MULTIPLE request. return false; } @@ -601,7 +601,7 @@ public final class XSelection { WindowPropertyGetter wpg = new WindowPropertyGetter(requestor, XAtom.get(property), 0, MAX_LENGTH, false, - XlibWrapper.AnyPropertyType); + XConstants.AnyPropertyType); try { wpg.execute(); @@ -629,7 +629,7 @@ public final class XSelection { property, wpg.getActualType(), wpg.getActualFormat(), - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, wpg.getData(), wpg.getNumberOfItems()); } finally { @@ -673,7 +673,7 @@ public final class XSelection { try { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), requestor, property, XAtom.XA_ATOM, dataFormat, - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, nativeDataPtr, count); } finally { XToolkit.awtUnlock(); @@ -712,7 +712,7 @@ public final class XSelection { private static class SelectionEventHandler implements XEventDispatcher { public void dispatchEvent(XEvent ev) { switch (ev.get_type()) { - case XlibWrapper.SelectionNotify: { + case XConstants.SelectionNotify: { XToolkit.awtLock(); try { XSelectionEvent xse = ev.get_xselection(); @@ -733,7 +733,7 @@ public final class XSelection { } break; } - case XlibWrapper.SelectionRequest: { + case XConstants.SelectionRequest: { XSelectionRequestEvent xsre = ev.get_xselectionrequest(); long atom = xsre.get_selection(); XSelection selection = XSelection.getSelection(XAtom.get(atom)); @@ -743,7 +743,7 @@ public final class XSelection { } break; } - case XlibWrapper.SelectionClear: { + case XConstants.SelectionClear: { XSelectionClearEvent xsce = ev.get_xselectionclear(); long atom = xsce.get_selection(); XSelection selection = XSelection.getSelection(XAtom.get(atom)); @@ -793,7 +793,7 @@ public final class XSelection { wattr.pData); XlibWrapper.XSelectInput(XToolkit.getDisplay(), requestor, wattr.get_your_event_mask() | - XlibWrapper.PropertyChangeMask); + XConstants.PropertyChangeMask); } finally { XToolkit.awtUnlock(); } @@ -805,10 +805,10 @@ public final class XSelection { public void dispatchEvent(XEvent ev) { switch (ev.get_type()) { - case XlibWrapper.PropertyNotify: + case XConstants.PropertyNotify: XPropertyEvent xpe = ev.get_xproperty(); if (xpe.get_window() == requestor && - xpe.get_state() == XlibWrapper.PropertyDelete && + xpe.get_state() == XConstants.PropertyDelete && xpe.get_atom() == property) { int count = data.length - offset; @@ -834,7 +834,7 @@ public final class XSelection { XlibWrapper.XChangeProperty(XToolkit.getDisplay(), requestor, property, target, format, - XlibWrapper.PropModeReplace, + XConstants.PropModeReplace, nativeDataPtr, count); } finally { XToolkit.awtUnlock(); @@ -853,9 +853,9 @@ public final class XSelection { private static class IncrementalTransferHandler implements XEventDispatcher { public void dispatchEvent(XEvent ev) { switch (ev.get_type()) { - case XlibWrapper.PropertyNotify: + case XConstants.PropertyNotify: XPropertyEvent xpe = ev.get_xproperty(); - if (xpe.get_state() == XlibWrapper.PropertyNewValue && + if (xpe.get_state() == XConstants.PropertyNewValue && xpe.get_atom() == selectionPropertyAtom.getAtom()) { XToolkit.awtLock(); try { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XSystemTrayPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XSystemTrayPeer.java index fa09a6f862c..83ba45ccbe8 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XSystemTrayPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XSystemTrayPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -131,7 +131,7 @@ public class XSystemTrayPeer implements SystemTrayPeer, XMSelectionListener { XClientMessageEvent xev = new XClientMessageEvent(); try { - xev.set_type(XlibWrapper.ClientMessage); + xev.set_type(XConstants.ClientMessage); xev.set_window(win); xev.set_format(32); xev.set_message_type(_NET_SYSTEM_TRAY_OPCODE.getAtom()); @@ -144,7 +144,7 @@ public class XSystemTrayPeer implements SystemTrayPeer, XMSelectionListener { XToolkit.awtLock(); try { XlibWrapper.XSendEvent(XToolkit.getDisplay(), win, false, - XlibWrapper.NoEventMask, xev.pData); + XConstants.NoEventMask, xev.pData); } finally { XToolkit.awtUnlock(); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java index 069568519d8..871f99368b6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java @@ -54,8 +54,7 @@ import sun.font.FontManager; import sun.misc.PerformanceLogger; import sun.print.PrintJob2D; -public final class XToolkit extends UNIXToolkit implements Runnable, XConstants -{ +public final class XToolkit extends UNIXToolkit implements Runnable { private static Logger log = Logger.getLogger("sun.awt.X11.XToolkit"); private static Logger eventLog = Logger.getLogger("sun.awt.X11.event.XToolkit"); private static final Logger timeoutTaskLog = Logger.getLogger("sun.awt.X11.timeoutTask.XToolkit"); @@ -169,7 +168,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants static XErrorHandler IgnoreBadWindowHandler = new XErrorHandler() { public int handleError(long display, XErrorEvent err) { XERROR_SAVE(err); - if (err.get_error_code() == BadWindow) { + if (err.get_error_code() == XConstants.BadWindow) { return 0; } else { return SAVED_ERROR_HANDLER(display, err); @@ -425,7 +424,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants // Only our windows guaranteely generate MotionNotify, so we // should track enter/leave, to catch the moment when to // switch to XQueryPointer - if (e.get_type() == MotionNotify) { + if (e.get_type() == XConstants.MotionNotify) { XMotionEvent ev = e.get_xmotion(); awtLock(); try { @@ -437,7 +436,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants } finally { awtUnlock(); } - } else if (e.get_type() == LeaveNotify) { + } else if (e.get_type() == XConstants.LeaveNotify) { // Leave from our window awtLock(); try { @@ -445,7 +444,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants } finally { awtUnlock(); } - } else if (e.get_type() == EnterNotify) { + } else if (e.get_type() == XConstants.EnterNotify) { // Entrance into our window XCrossingEvent ev = e.get_xcrossing(); awtLock(); @@ -492,7 +491,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants final XAnyEvent xany = ev.get_xany(); if (windowToXWindow(xany.get_window()) != null && - (ev.get_type() == MotionNotify || ev.get_type() == EnterNotify || ev.get_type() == LeaveNotify)) + (ev.get_type() == XConstants.MotionNotify || ev.get_type() == XConstants.EnterNotify || ev.get_type() == XConstants.LeaveNotify)) { processGlobalMotionEvent(ev); } @@ -549,15 +548,15 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants // If no events are queued, waitForEvents() causes calls to // awtUnlock(), awtJNI_ThreadYield, poll, awtLock(), // so it spends most of its time in poll, without holding the lock. - while ((XlibWrapper.XEventsQueued(getDisplay(), XlibWrapper.QueuedAfterReading) == 0) && - (XlibWrapper.XEventsQueued(getDisplay(), XlibWrapper.QueuedAfterFlush) == 0)) { + while ((XlibWrapper.XEventsQueued(getDisplay(), XConstants.QueuedAfterReading) == 0) && + (XlibWrapper.XEventsQueued(getDisplay(), XConstants.QueuedAfterFlush) == 0)) { callTimeoutTasks(); waitForEvents(getNextTaskTime()); } XlibWrapper.XNextEvent(getDisplay(),ev.pData); } - if (ev.get_type() != NoExpose) { + if (ev.get_type() != XConstants.NoExpose) { eventNumber++; } @@ -582,13 +581,13 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants } } } - if( keyEventLog.isLoggable(Level.FINE) && (ev.get_type() == KeyPress || ev.get_type() == KeyRelease) ) { + if( keyEventLog.isLoggable(Level.FINE) && (ev.get_type() == XConstants.KeyPress || ev.get_type() == XConstants.KeyRelease) ) { keyEventLog.fine("before XFilterEvent:"+ev); } if (XlibWrapper.XFilterEvent(ev.getPData(), w)) { continue; } - if( keyEventLog.isLoggable(Level.FINE) && (ev.get_type() == KeyPress || ev.get_type() == KeyRelease) ) { + if( keyEventLog.isLoggable(Level.FINE) && (ev.get_type() == XConstants.KeyPress || ev.get_type() == XConstants.KeyRelease) ) { keyEventLog.fine("after XFilterEvent:"+ev); // IS THIS CORRECT? } @@ -750,7 +749,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants * _NET_WM_STRUT[_PARTIAL] hints for iconified windows * are not included to the screen insets. */ - if (XlibUtil.getWindowMapState(window) == XlibWrapper.IsUnmapped) + if (XlibUtil.getWindowMapState(window) == XConstants.IsUnmapped) { continue; } @@ -1289,7 +1288,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants new XEventDispatcher() { public void dispatchEvent(XEvent ev) { switch (ev.get_type()) { - case PropertyNotify: + case XConstants.PropertyNotify: XPropertyEvent xpe = ev.get_xproperty(); awtLock(); @@ -1322,7 +1321,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants XlibWrapper.XChangeProperty(XToolkit.getDisplay(), XBaseWindow.getXAWTRootWindow().getWindow(), _XA_JAVA_TIME_PROPERTY_ATOM.getAtom(), XAtom.XA_ATOM, 32, - PropModeAppend, + XConstants.PropModeAppend, 0, 0); XlibWrapper.XFlush(XToolkit.getDisplay()); @@ -1539,8 +1538,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants final int shiftLock = keysymToPrimaryKeycode(XKeySymConstants.XK_Shift_Lock); final int capsLock = keysymToPrimaryKeycode(XKeySymConstants.XK_Caps_Lock); - final int modmask[] = { ShiftMask, LockMask, ControlMask, Mod1Mask, - Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; + final int modmask[] = { XConstants.ShiftMask, XConstants.LockMask, XConstants.ControlMask, XConstants.Mod1Mask, + XConstants.Mod2Mask, XConstants.Mod3Mask, XConstants.Mod4Mask, XConstants.Mod5Mask }; log.fine("In setupModifierMap"); awtLock(); @@ -2047,7 +2046,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants if (oops_waiter == null) { oops_waiter = new XEventDispatcher() { public void dispatchEvent(XEvent e) { - if (e.get_type() == SelectionNotify) { + if (e.get_type() == XConstants.SelectionNotify) { XSelectionEvent pe = e.get_xselection(); if (pe.get_property() == oops.getAtom()) { oops_updated = true; @@ -2083,7 +2082,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable, XConstants eventLog.log(Level.FINER, "WM_S0 selection owner {0}", new Object[] {XlibWrapper.XGetSelectionOwner(getDisplay(), atom.getAtom())}); XlibWrapper.XConvertSelection(getDisplay(), atom.getAtom(), XAtom.get("VERSION").getAtom(), oops.getAtom(), - win.getWindow(), XlibWrapper.CurrentTime); + win.getWindow(), XConstants.CurrentTime); XSync(); diff --git a/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java index e3bfacb4353..ff690bf9d06 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java @@ -98,7 +98,7 @@ public class XTrayIconPeer implements TrayIconPeer { parentXED = new XEventDispatcher() { // It's executed under AWTLock. public void dispatchEvent(XEvent ev) { - if (isDisposed() || ev.get_type() != XlibWrapper.ConfigureNotify) { + if (isDisposed() || ev.get_type() != XConstants.ConfigureNotify) { return; } @@ -194,7 +194,7 @@ public class XTrayIconPeer implements TrayIconPeer { XTrayIconPeer xtiPeer = XTrayIconPeer.this; public void dispatchEvent(XEvent ev) { - if (isDisposed() || ev.get_type() != XlibWrapper.ReparentNotify) { + if (isDisposed() || ev.get_type() != XConstants.ReparentNotify) { return; } @@ -214,7 +214,7 @@ public class XTrayIconPeer implements TrayIconPeer { } if (!isTrayIconDisplayed) { - addXED(eframeParentID, parentXED, XlibWrapper.StructureNotifyMask); + addXED(eframeParentID, parentXED, XConstants.StructureNotifyMask); isTrayIconDisplayed = true; XToolkit.awtLockNotifyAll(); @@ -222,7 +222,7 @@ public class XTrayIconPeer implements TrayIconPeer { } }; - addXED(getWindow(), eframeXED, XlibWrapper.StructureNotifyMask); + addXED(getWindow(), eframeXED, XConstants.StructureNotifyMask); XSystemTrayPeer.getPeerInstance().addTrayIcon(this); // throws AWTException diff --git a/jdk/src/solaris/classes/sun/awt/X11/XUtilConstants.java b/jdk/src/solaris/classes/sun/awt/X11/XUtilConstants.java index 9b15fc079ba..048ab113439 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XUtilConstants.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XUtilConstants.java @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -25,7 +25,10 @@ package sun.awt.X11; -public interface XUtilConstants { +final public class XUtilConstants { + + private XUtilConstants(){} + /* * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding * value (x, y, width, height) was found in the parsed string. diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWINProtocol.java b/jdk/src/solaris/classes/sun/awt/X11/XWINProtocol.java index 94465466950..83b676a1a60 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWINProtocol.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWINProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -58,7 +58,7 @@ class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol { } XClientMessageEvent req = new XClientMessageEvent(); - req.set_type(XlibWrapper.ClientMessage); + req.set_type(XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_WIN_STATE.getAtom()); req.set_format(32); @@ -71,7 +71,7 @@ class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol { XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()), false, - XlibWrapper.SubstructureRedirectMask | XlibWrapper.SubstructureNotifyMask, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, req.pData); } finally { @@ -150,7 +150,7 @@ class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol { public void setLayer(XWindowPeer window, int layer) { if (window.isShowing()) { XClientMessageEvent req = new XClientMessageEvent(); - req.set_type(XlibWrapper.ClientMessage); + req.set_type(XConstants.ClientMessage); req.set_window(window.getWindow()); req.set_message_type(XA_WIN_LAYER.getAtom()); req.set_format(32); @@ -164,7 +164,7 @@ class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol { XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()), false, - /*XlibWrapper.SubstructureRedirectMask | */XlibWrapper.SubstructureNotifyMask, + /*XConstants.SubstructureRedirectMask | */XConstants.SubstructureNotifyMask, req.pData); } finally { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWM.java b/jdk/src/solaris/classes/sun/awt/X11/XWM.java index d8e0d6b031d..c3adec9aa02 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWM.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWM.java @@ -46,7 +46,7 @@ import java.util.regex.Pattern; * Class incapsulating knowledge about window managers in general * Descendants should provide some information about specific window manager. */ -final class XWM implements MWMConstants, XUtilConstants +final class XWM { private final static Logger log = Logger.getLogger("sun.awt.X11.XWM"); @@ -274,12 +274,12 @@ final class XWM implements MWMConstants, XUtilConstants } winmgr_running = false; - substruct.set_event_mask(XlibWrapper.SubstructureRedirectMask); + substruct.set_event_mask(XConstants.SubstructureRedirectMask); XToolkit.WITH_XERROR_HANDLER(DetectWMHandler); XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), - XlibWrapper.CWEventMask, + XConstants.CWEventMask, substruct.pData); XToolkit.RESTORE_XERROR_HANDLER(); @@ -291,7 +291,7 @@ final class XWM implements MWMConstants, XUtilConstants substruct.set_event_mask(0); XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), - XlibWrapper.CWEventMask, + XConstants.CWEventMask, substruct.pData); if (insLog.isLoggable(Level.FINE)) { insLog.finer("It looks like there is no WM thus NO_WM"); @@ -322,7 +322,7 @@ final class XWM implements MWMConstants, XUtilConstants XAtom.XA_STRING); try { int status = getter.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return 0; } @@ -411,7 +411,7 @@ final class XWM implements MWMConstants, XUtilConstants false, XA_DT_SM_WINDOW_INFO); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { log.finer("Getting of _DT_SM_WINDOW_INFO is not successfull"); return false; } @@ -442,7 +442,7 @@ final class XWM implements MWMConstants, XUtilConstants status = getter2.execute(XToolkit.IgnoreBadWindowHandler); - if (status != XlibWrapper.Success || getter2.getData() == 0) { + if (status != XConstants.Success || getter2.getData() == 0) { log.finer("Getting of _DT_SM_STATE_INFO is not successfull"); return false; } @@ -480,18 +480,18 @@ final class XWM implements MWMConstants, XUtilConstants WindowPropertyGetter getter = new WindowPropertyGetter(XToolkit.getDefaultRootWindow(), XA_MOTIF_WM_INFO, 0, - PROP_MOTIF_WM_INFO_ELEMENTS, + MWMConstants.PROP_MOTIF_WM_INFO_ELEMENTS, false, XA_MOTIF_WM_INFO); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { + if (status != XConstants.Success || getter.getData() == 0) { return false; } if (getter.getActualType() != XA_MOTIF_WM_INFO.getAtom() || getter.getActualFormat() != 32 - || getter.getNumberOfItems() != PROP_MOTIF_WM_INFO_ELEMENTS + || getter.getNumberOfItems() != MWMConstants.PROP_MOTIF_WM_INFO_ELEMENTS || getter.getBytesAfter() != 0) { return false; @@ -516,7 +516,7 @@ final class XWM implements MWMConstants, XUtilConstants 0, 1, false, XA_WM_STATE); try { - if (state_getter.execute() == XlibWrapper.Success && + if (state_getter.execute() == XConstants.Success && state_getter.getData() != 0 && state_getter.getActualType() == XA_WM_STATE.getAtom()) { @@ -577,7 +577,7 @@ final class XWM implements MWMConstants, XUtilConstants static XToolkit.XErrorHandler VerifyChangePropertyHandler = new XToolkit.XErrorHandler() { public int handleError(long display, XErrorEvent err) { XToolkit.XERROR_SAVE(err); - if (err.get_request_code() == XlibWrapper.X_ChangeProperty) { + if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) { return 0; } else { return XToolkit.SAVED_ERROR_HANDLER(display, err); @@ -621,11 +621,11 @@ final class XWM implements MWMConstants, XUtilConstants XlibWrapper.XChangePropertyS(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), XA_ICEWM_WINOPTHINT.getAtom(), XA_ICEWM_WINOPTHINT.getAtom(), - 8, XlibWrapper.PropModeReplace, + 8, XConstants.PropModeReplace, new String(opt)); XToolkit.RESTORE_XERROR_HANDLER(); - if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != XlibWrapper.Success) { + if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != XConstants.Success) { log.finer("Erorr getting XA_ICEWM_WINOPTHINT property"); return false; } @@ -654,7 +654,7 @@ final class XWM implements MWMConstants, XUtilConstants true, XA_ICEWM_WINOPTHINT); try { int status = getter.execute(); - boolean res = (status == XlibWrapper.Success && getter.getActualType() != 0); + boolean res = (status == XConstants.Success && getter.getActualType() != 0); log.finer("Status getting XA_ICEWM_WINOPTHINT: " + !res); return !res || isNetWMName("IceWM"); } finally { @@ -686,8 +686,8 @@ final class XWM implements MWMConstants, XUtilConstants static XToolkit.XErrorHandler DetectWMHandler = new XToolkit.XErrorHandler() { public int handleError(long display, XErrorEvent err) { XToolkit.XERROR_SAVE(err); - if (err.get_request_code() == XlibWrapper.X_ChangeWindowAttributes - && err.get_error_code() == XlibWrapper.BadAccess) + if (err.get_request_code() == XProtocolConstants.X_ChangeWindowAttributes + && err.get_error_code() == XConstants.BadAccess) { winmgr_running = true; return 0; @@ -804,7 +804,7 @@ final class XWM implements MWMConstants, XUtilConstants * XXX: Why do we need this in the first place??? */ static void removeSizeHints(XDecoratedPeer window, long mask) { - mask &= PMaxSize | PMinSize; + mask &= XUtilConstants.PMaxSize | XUtilConstants.PMinSize; XToolkit.awtLock(); try { @@ -830,13 +830,13 @@ final class XWM implements MWMConstants, XUtilConstants * rest of the code. */ static int normalizeMotifDecor(int decorations) { - if ((decorations & MWM_DECOR_ALL) == 0) { + if ((decorations & MWMConstants.MWM_DECOR_ALL) == 0) { return decorations; } - int d = MWM_DECOR_BORDER | MWM_DECOR_RESIZEH - | MWM_DECOR_TITLE - | MWM_DECOR_MENU | MWM_DECOR_MINIMIZE - | MWM_DECOR_MAXIMIZE; + int d = MWMConstants.MWM_DECOR_BORDER | MWMConstants.MWM_DECOR_RESIZEH + | MWMConstants.MWM_DECOR_TITLE + | MWMConstants.MWM_DECOR_MENU | MWMConstants.MWM_DECOR_MINIMIZE + | MWMConstants.MWM_DECOR_MAXIMIZE; d &= ~decorations; return d; } @@ -848,14 +848,14 @@ final class XWM implements MWMConstants, XUtilConstants * rest of the code. */ static int normalizeMotifFunc(int functions) { - if ((functions & MWM_FUNC_ALL) == 0) { + if ((functions & MWMConstants.MWM_FUNC_ALL) == 0) { return functions; } - int f = MWM_FUNC_RESIZE | - MWM_FUNC_MOVE | - MWM_FUNC_MAXIMIZE | - MWM_FUNC_MINIMIZE | - MWM_FUNC_CLOSE; + int f = MWMConstants.MWM_FUNC_RESIZE | + MWMConstants.MWM_FUNC_MOVE | + MWMConstants.MWM_FUNC_MAXIMIZE | + MWMConstants.MWM_FUNC_MINIMIZE | + MWMConstants.MWM_FUNC_CLOSE; f &= ~functions; return f; } @@ -872,15 +872,15 @@ final class XWM implements MWMConstants, XUtilConstants XAtomList decorDel = new XAtomList(); decorations = normalizeMotifDecor(decorations); if (insLog.isLoggable(Level.FINER)) insLog.finer("Setting OL_DECOR to " + Integer.toBinaryString(decorations)); - if ((decorations & MWM_DECOR_TITLE) == 0) { + if ((decorations & MWMConstants.MWM_DECOR_TITLE) == 0) { decorDel.add(XA_OL_DECOR_HEADER); } - if ((decorations & (MWM_DECOR_RESIZEH | MWM_DECOR_MAXIMIZE)) == 0) { + if ((decorations & (MWMConstants.MWM_DECOR_RESIZEH | MWMConstants.MWM_DECOR_MAXIMIZE)) == 0) { decorDel.add(XA_OL_DECOR_RESIZE); } - if ((decorations & (MWM_DECOR_MENU | - MWM_DECOR_MAXIMIZE | - MWM_DECOR_MINIMIZE)) == 0) + if ((decorations & (MWMConstants.MWM_DECOR_MENU | + MWMConstants.MWM_DECOR_MAXIMIZE | + MWMConstants.MWM_DECOR_MINIMIZE)) == 0) { decorDel.add(XA_OL_DECOR_CLOSE); } @@ -898,19 +898,21 @@ final class XWM implements MWMConstants, XUtilConstants */ static void setMotifDecor(XWindowPeer window, boolean resizable, int decorations, int functions) { /* Apparently some WMs don't implement MWM_*_ALL semantic correctly */ - if ((decorations & MWM_DECOR_ALL) != 0 - && (decorations != MWM_DECOR_ALL)) + if ((decorations & MWMConstants.MWM_DECOR_ALL) != 0 + && (decorations != MWMConstants.MWM_DECOR_ALL)) { decorations = normalizeMotifDecor(decorations); } - if ((functions & MWM_FUNC_ALL) != 0 - && (functions != MWM_FUNC_ALL)) + if ((functions & MWMConstants.MWM_FUNC_ALL) != 0 + && (functions != MWMConstants.MWM_FUNC_ALL)) { functions = normalizeMotifFunc(functions); } PropMwmHints hints = window.getMWMHints(); - hints.set_flags(hints.get_flags() | MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS); + hints.set_flags(hints.get_flags() | + MWMConstants.MWM_HINTS_FUNCTIONS | + MWMConstants.MWM_HINTS_DECORATIONS); hints.set_functions(functions); hints.set_decorations(decorations); @@ -950,10 +952,10 @@ final class XWM implements MWMConstants, XUtilConstants boolean resizable = window.isResizable(); if (!resizable) { - if ((decorations & MWM_DECOR_ALL) != 0) { - decorations |= MWM_DECOR_RESIZEH | MWM_DECOR_MAXIMIZE; + if ((decorations & MWMConstants.MWM_DECOR_ALL) != 0) { + decorations |= MWMConstants.MWM_DECOR_RESIZEH | MWMConstants.MWM_DECOR_MAXIMIZE; } else { - decorations &= ~(MWM_DECOR_RESIZEH | MWM_DECOR_MAXIMIZE); + decorations &= ~(MWMConstants.MWM_DECOR_RESIZEH | MWMConstants.MWM_DECOR_MAXIMIZE); } } setMotifDecor(window, resizable, decorations, functions); @@ -988,7 +990,7 @@ final class XWM implements MWMConstants, XUtilConstants /* REMINDER: will need to revisit when setExtendedStateBounds is added */ //Fix for 4320050: Minimum size for java.awt.Frame is not being enforced. //We need to update frame's minimum size, not to reset it - removeSizeHints(window, PMaxSize); + removeSizeHints(window, XUtilConstants.PMaxSize); window.updateMinimumSize(); /* Restore decorations */ @@ -1134,7 +1136,7 @@ final class XWM implements MWMConstants, XUtilConstants } int wm_state = window.getWMState(); - if (wm_state == XlibWrapper.WithdrawnState) { + if (wm_state == XUtilConstants.WithdrawnState) { stateLog.finer("WithdrawnState"); return false; } else { @@ -1158,7 +1160,7 @@ final class XWM implements MWMConstants, XUtilConstants int getState(XDecoratedPeer window) { int res = 0; final int wm_state = window.getWMState(); - if (wm_state == XlibWrapper.IconicState) { + if (wm_state == XUtilConstants.IconicState) { res = Frame.ICONIFIED; } else { res = Frame.NORMAL; @@ -1397,7 +1399,7 @@ final class XWM implements MWMConstants, XUtilConstants new WindowPropertyGetter(window, atom, 0, 4, false, XAtom.XA_CARDINAL); try { - if (getter.execute() != XlibWrapper.Success + if (getter.execute() != XConstants.Success || getter.getData() == 0 || getter.getActualType() != XAtom.XA_CARDINAL || getter.getActualFormat() != 32) @@ -1426,7 +1428,7 @@ final class XWM implements MWMConstants, XUtilConstants XClientMessageEvent msg = new XClientMessageEvent(); msg.zero(); - msg.set_type(XlibWrapper.ClientMessage); + msg.set_type(XConstants.ClientMessage); msg.set_display(XToolkit.getDisplay()); msg.set_window(window); msg.set_format(32); @@ -1436,13 +1438,15 @@ final class XWM implements MWMConstants, XUtilConstants if (net_protocol != null && net_protocol.active()) { msg.set_message_type(XA_NET_REQUEST_FRAME_EXTENTS.getAtom()); XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), - false, XlibWrapper.SubstructureRedirectMask | XlibWrapper.SubstructureNotifyMask, + false, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, msg.getPData()); } if (getWMID() == XWM.KDE2_WM) { msg.set_message_type(XA_KDE_NET_WM_FRAME_STRUT.getAtom()); XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), - false, XlibWrapper.SubstructureRedirectMask | XlibWrapper.SubstructureNotifyMask, + false, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, msg.getPData()); } // XXX: should we wait for response? XIfEvent() would be useful here :) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java index 2d55ef889fb..f7ef09b2e11 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java @@ -178,10 +178,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { AwtGraphicsConfigData gData = getGraphicsConfigurationData(); X11GraphicsConfig config = (X11GraphicsConfig) getGraphicsConfiguration(); XVisualInfo visInfo = gData.get_awt_visInfo(); - params.putIfNull(EVENT_MASK, KeyPressMask | KeyReleaseMask - | FocusChangeMask | ButtonPressMask | ButtonReleaseMask - | EnterWindowMask | LeaveWindowMask | PointerMotionMask - | ButtonMotionMask | ExposureMask | StructureNotifyMask); + params.putIfNull(EVENT_MASK, XConstants.KeyPressMask | XConstants.KeyReleaseMask + | XConstants.FocusChangeMask | XConstants.ButtonPressMask | XConstants.ButtonReleaseMask + | XConstants.EnterWindowMask | XConstants.LeaveWindowMask | XConstants.PointerMotionMask + | XConstants.ButtonMotionMask | XConstants.ExposureMask | XConstants.StructureNotifyMask); if (target != null) { params.putIfNull(BOUNDS, target.getBounds()); @@ -192,9 +192,9 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { getColorModel(); // fix 4948833: this call forces the color map to be initialized params.putIfNull(COLORMAP, gData.get_awt_cmap()); params.putIfNull(DEPTH, gData.get_awt_depth()); - params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XlibWrapper.InputOutput)); + params.putIfNull(VISUAL_CLASS, Integer.valueOf((int)XConstants.InputOutput)); params.putIfNull(VISUAL, visInfo.get_visual()); - params.putIfNull(VALUE_MASK, XlibWrapper.CWBorderPixel | XlibWrapper.CWEventMask | XlibWrapper.CWColormap); + params.putIfNull(VALUE_MASK, XConstants.CWBorderPixel | XConstants.CWEventMask | XConstants.CWColormap); Long parentWindow = (Long)params.get(PARENT_WINDOW); if (parentWindow == null || parentWindow.longValue() == 0) { XToolkit.awtLock(); @@ -553,10 +553,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { static int getModifiers(int state, int button, int keyCode) { int modifiers = 0; - if (((state & XlibWrapper.ShiftMask) != 0) ^ (keyCode == KeyEvent.VK_SHIFT)) { + if (((state & XConstants.ShiftMask) != 0) ^ (keyCode == KeyEvent.VK_SHIFT)) { modifiers |= InputEvent.SHIFT_DOWN_MASK; } - if (((state & XlibWrapper.ControlMask) != 0) ^ (keyCode == KeyEvent.VK_CONTROL)) { + if (((state & XConstants.ControlMask) != 0) ^ (keyCode == KeyEvent.VK_CONTROL)) { modifiers |= InputEvent.CTRL_DOWN_MASK; } if (((state & XToolkit.metaMask) != 0) ^ (keyCode == KeyEvent.VK_META)) { @@ -568,13 +568,13 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { if (((state & XToolkit.modeSwitchMask) != 0) ^ (keyCode == KeyEvent.VK_ALT_GRAPH)) { modifiers |= InputEvent.ALT_GRAPH_DOWN_MASK; } - if (((state & XlibWrapper.Button1Mask) != 0) ^ (button == MouseEvent.BUTTON1)) { + if (((state & XConstants.Button1Mask) != 0) ^ (button == MouseEvent.BUTTON1)) { modifiers |= InputEvent.BUTTON1_DOWN_MASK; } - if (((state & XlibWrapper.Button2Mask) != 0) ^ (button == MouseEvent.BUTTON2)) { + if (((state & XConstants.Button2Mask) != 0) ^ (button == MouseEvent.BUTTON2)) { modifiers |= InputEvent.BUTTON2_DOWN_MASK; } - if (((state & XlibWrapper.Button3Mask) != 0) ^ (button == MouseEvent.BUTTON3)) { + if (((state & XConstants.Button3Mask) != 0) ^ (button == MouseEvent.BUTTON3)) { modifiers |= InputEvent.BUTTON3_DOWN_MASK; } return modifiers; @@ -584,10 +584,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { int mods = stroke.getModifiers(); int res = 0; if ((mods & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) { - res |= XToolkit.ShiftMask; + res |= XConstants.ShiftMask; } if ((mods & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) { - res |= XToolkit.ControlMask; + res |= XConstants.ControlMask; } if ((mods & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) { res |= XToolkit.altMask; @@ -602,12 +602,12 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } private static int getButtonMask(long mouseButton) { - if (mouseButton == XlibWrapper.Button1) { - return XlibWrapper.Button1Mask; - } else if (mouseButton == XlibWrapper.Button2) { - return XlibWrapper.Button2Mask; - } else if (mouseButton == XlibWrapper.Button3) { - return XlibWrapper.Button3Mask; + if (mouseButton == XConstants.Button1) { + return XConstants.Button1Mask; + } else if (mouseButton == XConstants.Button2) { + return XConstants.Button2Mask; + } else if (mouseButton == XConstants.Button3) { + return XConstants.Button3Mask; } return 0; } @@ -659,7 +659,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { y = localXY.y; } - if (type == XlibWrapper.ButtonPress) { + if (type == XConstants.ButtonPress) { XWindow lastWindow = (lastWindowRef != null) ? ((XWindow)lastWindowRef.get()):(null); /* multiclick checking @@ -689,16 +689,16 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } } - if (lbutton == XlibWrapper.Button1) + if (lbutton == XConstants.Button1) button = MouseEvent.BUTTON1; - else if (lbutton == XlibWrapper.Button2 ) + else if (lbutton == XConstants.Button2 ) button = MouseEvent.BUTTON2; - else if (lbutton == XlibWrapper.Button3) + else if (lbutton == XConstants.Button3) button = MouseEvent.BUTTON3; - else if (lbutton == XlibWrapper.Button4) { + else if (lbutton == XConstants.Button4) { button = 4; wheel_mouse = true; - } else if (lbutton == XlibWrapper.Button5) { + } else if (lbutton == XConstants.Button5) { button = 5; wheel_mouse = true; } @@ -707,7 +707,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { if (!wheel_mouse) { MouseEvent me = new MouseEvent((Component)getEventSource(), - type == XlibWrapper.ButtonPress ? MouseEvent.MOUSE_PRESSED : MouseEvent.MOUSE_RELEASED, + type == XConstants.ButtonPress ? MouseEvent.MOUSE_PRESSED : MouseEvent.MOUSE_RELEASED, jWhen,modifiers, x, y, xbe.get_x_root(), xbe.get_y_root(), @@ -716,7 +716,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { postEventToEventQueue(me); if (((mouseDragState & getButtonMask(lbutton)) == 0) && // No up-button in the drag-state - (type == XlibWrapper.ButtonRelease)) + (type == XConstants.ButtonRelease)) { postEventToEventQueue(me = new MouseEvent((Component)getEventSource(), MouseEvent.MOUSE_CLICKED, @@ -731,7 +731,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } else { - if (xev.get_type() == XlibWrapper.ButtonPress) { + if (xev.get_type() == XConstants.ButtonPress) { MouseWheelEvent mwe = new MouseWheelEvent((Component)getEventSource(),MouseEvent.MOUSE_WHEEL, jWhen, modifiers, x, y, @@ -753,7 +753,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { return; } - int mouseKeyState = (xme.get_state() & (Button1Mask | Button2Mask | Button3Mask)); + int mouseKeyState = (xme.get_state() & (XConstants.Button1Mask | XConstants.Button2Mask | XConstants.Button3Mask)); boolean isDragging = (mouseKeyState != 0); int mouseEventType = 0; @@ -823,10 +823,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { // accordingly. This leads to impossibility to make a double click on Component (6404708) XWindowPeer toplevel = getToplevelXWindow(); if (toplevel != null && !toplevel.isModalBlocked()){ - if (xce.get_mode() != NotifyNormal) { + if (xce.get_mode() != XConstants.NotifyNormal) { // 6404708 : need update cursor in accordance with skipping Leave/EnterNotify event // whereas it doesn't need to handled further. - if (xce.get_type() == EnterNotify) { + if (xce.get_type() == XConstants.EnterNotify) { XAwtState.setComponentMouseEntered(getEventSource()); XGlobalCursorManager.nativeUpdateCursor(getEventSource()); } else { // LeaveNotify: @@ -840,7 +840,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { // From java point the event is bogus as ancestor is obscured, so if // the child can get java event itself, we skip it on ancestor. long childWnd = xce.get_subwindow(); - if (childWnd != None) { + if (childWnd != XConstants.None) { XBaseWindow child = XToolkit.windowToXWindow(childWnd); if (child != null && child instanceof XWindow && !child.isEventDisabled(xev)) @@ -853,7 +853,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { final Component compWithMouse = XAwtState.getComponentMouseEntered(); if (toplevel != null) { if(!toplevel.isModalBlocked()){ - if (xce.get_type() == EnterNotify) { + if (xce.get_type() == XConstants.EnterNotify) { // Change XAwtState's component mouse entered to the up-to-date one before requesting // to update the cursor since XAwtState.getComponentMouseEntered() is used when the // cursor is updated (in XGlobalCursorManager.findHeavyweightUnderCursor()). @@ -895,7 +895,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { eventLog.finest("Clearing last window ref"); lastWindowRef = null; } - if (xce.get_type() == EnterNotify) { + if (xce.get_type() == XConstants.EnterNotify) { MouseEvent me = new MouseEvent(getEventSource(), MouseEvent.MOUSE_ENTERED, jWhen, modifiers, xce.get_x(), xce.get_y(), xce.get_x_root(), xce.get_y_root(), clickCount, popupTrigger, MouseEvent.NOBUTTON); @@ -990,7 +990,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { final void handleKeyPress(XKeyEvent ev) { long keysym[] = new long[2]; char unicodeKey = 0; - keysym[0] = NoSymbol; + keysym[0] = XConstants.NoSymbol; if (keyEventLog.isLoggable(Level.FINE)) { logIncomingKeyEvent( ev ); @@ -1073,7 +1073,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { private void handleKeyRelease(XKeyEvent ev) { long keysym[] = new long[2]; char unicodeKey = 0; - keysym[0] = NoSymbol; + keysym[0] = XConstants.NoSymbol; if (keyEventLog.isLoggable(Level.FINE)) { logIncomingKeyEvent( ev ); @@ -1153,10 +1153,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } void updateSizeHints(int x, int y, int width, int height) { - long flags = XlibWrapper.PSize | (isLocationByPlatform() ? 0 : (XlibWrapper.PPosition | XlibWrapper.USPosition)); + long flags = XUtilConstants.PSize | (isLocationByPlatform() ? 0 : (XUtilConstants.PPosition | XUtilConstants.USPosition)); if (!isResizable()) { log.log(Level.FINER, "Window {0} is not resizable", new Object[] {this}); - flags |= XlibWrapper.PMinSize | XlibWrapper.PMaxSize; + flags |= XUtilConstants.PMinSize | XUtilConstants.PMaxSize; } else { log.log(Level.FINER, "Window {0} is resizable", new Object[] {this}); } @@ -1164,10 +1164,10 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } void updateSizeHints(int x, int y) { - long flags = isLocationByPlatform() ? 0 : (XlibWrapper.PPosition | XlibWrapper.USPosition); + long flags = isLocationByPlatform() ? 0 : (XUtilConstants.PPosition | XUtilConstants.USPosition); if (!isResizable()) { log.log(Level.FINER, "Window {0} is not resizable", new Object[] {this}); - flags |= XlibWrapper.PMinSize | XlibWrapper.PMaxSize | XlibWrapper.PSize; + flags |= XUtilConstants.PMinSize | XUtilConstants.PMaxSize | XUtilConstants.PSize; } else { log.log(Level.FINER, "Window {0} is resizable", new Object[] {this}); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java index c5fc7e1a7d4..2222163b4ab 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java @@ -50,7 +50,7 @@ import sun.awt.X11GraphicsDevice; import sun.awt.X11GraphicsEnvironment; class XWindowPeer extends XPanelPeer implements WindowPeer, - DisplayChangedListener, MWMConstants { + DisplayChangedListener { private static final Logger log = Logger.getLogger("sun.awt.X11.XWindowPeer"); private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XWindowPeer"); @@ -133,9 +133,9 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, params.put(REPARENTED, Boolean.valueOf(isOverrideRedirect() || isSimpleWindow())); super.preInit(params); - params.putIfNull(BIT_GRAVITY, Integer.valueOf(NorthWestGravity)); + params.putIfNull(BIT_GRAVITY, Integer.valueOf(XConstants.NorthWestGravity)); - savedState = WithdrawnState; + savedState = XUtilConstants.WithdrawnState; XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE"); winAttr = new XWindowAttributesData(); @@ -239,7 +239,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, // Set group leader XWMHints hints = getWMHints(); - hints.set_flags(hints.get_flags() | (int)XlibWrapper.WindowGroupHint); + hints.set_flags(hints.get_flags() | (int)XUtilConstants.WindowGroupHint); hints.set_window_group(ownerWindow); XlibWrapper.XSetWMHints(XToolkit.getDisplay(), getWindow(), hints.pData); } @@ -503,7 +503,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, Rectangle bounds = getBounds(); XSizeHints hints = getHints(); - setSizeHints(hints.get_flags() | XlibWrapper.PPosition | XlibWrapper.PSize, + setSizeHints(hints.get_flags() | XUtilConstants.PPosition | XUtilConstants.PSize, bounds.x, bounds.y, bounds.width, bounds.height); XWM.setMotifDecor(this, false, 0, 0); @@ -531,7 +531,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, XToolkit.awtLock(); try { XWMHints hints = getWMHints(); - hints.set_flags(hints.get_flags() | (int)XlibWrapper.InputHint); + hints.set_flags(hints.get_flags() | (int)XUtilConstants.InputHint); hints.set_input(false/*isNativelyNonFocusableWindow() ? (0):(1)*/); XlibWrapper.XSetWMHints(XToolkit.getDisplay(), getWindow(), hints.pData); } @@ -821,12 +821,12 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, if (isEventDisabled(xev)) { return; } - if (xev.get_type() == XlibWrapper.FocusIn) + if (xev.get_type() == XConstants.FocusIn) { // If this window is non-focusable don't post any java focus event if (focusAllowedFor()) { - if (xfe.get_mode() == XlibWrapper.NotifyNormal // Normal notify - || xfe.get_mode() == XlibWrapper.NotifyWhileGrabbed) // Alt-Tab notify + if (xfe.get_mode() == XConstants.NotifyNormal // Normal notify + || xfe.get_mode() == XConstants.NotifyWhileGrabbed) // Alt-Tab notify { handleWindowFocusIn(xfe.get_serial()); } @@ -834,8 +834,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, } else { - if (xfe.get_mode() == XlibWrapper.NotifyNormal // Normal notify - || xfe.get_mode() == XlibWrapper.NotifyWhileGrabbed) // Alt-Tab notify + if (xfe.get_mode() == XConstants.NotifyNormal // Normal notify + || xfe.get_mode() == XConstants.NotifyWhileGrabbed) // Alt-Tab notify { // If this window is non-focusable don't post any java focus event if (!isNativelyNonFocusableWindow()) { @@ -1022,7 +1022,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, try { Rectangle bounds = getBounds(); XSizeHints hints = getHints(); - setSizeHints(hints.get_flags() & ~(USPosition | PPosition), + setSizeHints(hints.get_flags() & ~(XUtilConstants.USPosition | XUtilConstants.PPosition), bounds.x, bounds.y, bounds.width, bounds.height); } finally { XToolkit.awtUnlock(); @@ -1059,10 +1059,10 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, XUnmapEvent unmap = new XUnmapEvent(); unmap.set_window(window); unmap.set_event(XToolkit.getDefaultRootWindow()); - unmap.set_type((int)XlibWrapper.UnmapNotify); + unmap.set_type((int)XConstants.UnmapNotify); unmap.set_from_configure(false); XlibWrapper.XSendEvent(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), - false, XlibWrapper.SubstructureNotifyMask | XlibWrapper.SubstructureRedirectMask, + false, XConstants.SubstructureNotifyMask | XConstants.SubstructureRedirectMask, unmap.pData); unmap.dispose(); } @@ -1305,12 +1305,12 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, XWM.XA_WM_STATE); try { int status = getter.execute(); - if (status != XlibWrapper.Success || getter.getData() == 0) { - return savedState = XlibWrapper.WithdrawnState; + if (status != XConstants.Success || getter.getData() == 0) { + return savedState = XUtilConstants.WithdrawnState; } if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) { - return savedState = XlibWrapper.WithdrawnState; + return savedState = XUtilConstants.WithdrawnState; } savedState = (int)Native.getCard32(getter.getData()); } finally { @@ -1321,7 +1321,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, } boolean isWithdrawn() { - return getWMState() == XlibWrapper.WithdrawnState; + return getWMState() == XUtilConstants.WithdrawnState; } boolean hasDecorations(int decor) { @@ -1818,14 +1818,14 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, if( rootPropertyEventDispatcher == null ) { rootPropertyEventDispatcher = new XEventDispatcher() { public void dispatchEvent(XEvent ev) { - if( ev.get_type() == PropertyNotify ) { + if( ev.get_type() == XConstants.PropertyNotify ) { handleRootPropertyNotify( ev ); } } }; XlibWrapper.XSelectInput( XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(), - XlibWrapper.PropertyChangeMask); + XConstants.PropertyChangeMask); XToolkit.addEventDispatcher(XToolkit.getDefaultRootWindow(), rootPropertyEventDispatcher); } @@ -1860,7 +1860,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, public PropMwmHints getMWMHints() { if (mwm_hints == null) { mwm_hints = new PropMwmHints(); - if (!XWM.XA_MWM_HINTS.getAtomData(getWindow(), mwm_hints.pData, PROP_MWM_HINTS_ELEMENTS)) { + if (!XWM.XA_MWM_HINTS.getAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS)) { mwm_hints.zero(); } } @@ -1870,7 +1870,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, public void setMWMHints(PropMwmHints hints) { mwm_hints = hints; if (hints != null) { - XWM.XA_MWM_HINTS.setAtomData(getWindow(), mwm_hints.pData, PROP_MWM_HINTS_ELEMENTS); + XWM.XA_MWM_HINTS.setAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS); } } @@ -1960,7 +1960,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, new Object[] {xme, isGrabbed(), containsGlobal(xme.get_x_root(), xme.get_y_root())}); } if (isGrabbed()) { - boolean dragging = (xme.get_state() & (Button1Mask | Button2Mask | Button3Mask)) != 0; + boolean dragging = (xme.get_state() & (XConstants.Button1Mask | XConstants.Button2Mask | XConstants.Button3Mask)) != 0; // When window is grabbed, all events are dispatched to // it. Retarget them to the corresponding windows (notice // that XBaseWindow.dispatchEvent does the opposite @@ -2014,12 +2014,12 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, try { grabLog.log(Level.FINER, " - Grab event target {0} (press target {1})", new Object[] {target, pressTarget}); if (xbe.get_type() == XConstants.ButtonPress - && xbe.get_button() == XlibWrapper.Button1) + && xbe.get_button() == XConstants.Button1) { // need to keep it to retarget mouse release pressTarget = target; } else if (xbe.get_type() == XConstants.ButtonRelease - && xbe.get_button() == XlibWrapper.Button1 + && xbe.get_button() == XConstants.Button1 && pressTarget != target) { // during grab we do receive mouse release on different component (not on the source diff --git a/jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java b/jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java index b6086ef469b..bdc6e7c376e 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2006-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 @@ -152,7 +152,7 @@ public class XlibUtil int status = xtc.execute(XToolkit.IgnoreBadWindowHandler); if ((status != 0) && ((XToolkit.saved_error == null) || - (XToolkit.saved_error.get_error_code() == XlibWrapper.Success))) + (XToolkit.saved_error.get_error_code() == XConstants.Success))) { translated = new Point(xtc.get_dest_x(), xtc.get_dest_y()); } @@ -351,7 +351,7 @@ public class XlibUtil XToolkit.RESTORE_XERROR_HANDLER(); if ((status != 0) && ((XToolkit.saved_error == null) || - (XToolkit.saved_error.get_error_code() == XlibWrapper.Success))) + (XToolkit.saved_error.get_error_code() == XConstants.Success))) { return wattr.get_map_state(); } @@ -362,7 +362,7 @@ public class XlibUtil XToolkit.awtUnlock(); } - return XlibWrapper.IsUnmapped; + return XConstants.IsUnmapped; } /** diff --git a/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java b/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java index 079f7ac8d28..50be5f54da7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-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 @@ -29,8 +29,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; import sun.misc.*; -public class XlibWrapper implements XConstants, XUtilConstants, XProtocolConstants, - XCursorFontConstants +final public class XlibWrapper { static Unsafe unsafe = Unsafe.getUnsafe(); // strange constants @@ -321,7 +320,7 @@ static native String XSetLocaleModifiers(String modifier_list); if (XPropertyCache.isCachingSupported() && XToolkit.windowToXWindow(window) != null && WindowPropertyGetter.isCacheableProperty(XAtom.get(atom)) && - mode == PropModeReplace) + mode == XConstants.PropModeReplace) { int length = (format / 8) * nelements; XPropertyCache.storeCache( @@ -585,25 +584,25 @@ static native String XSetLocaleModifiers(String modifier_list); static String hintsToString(long flags) { StringBuffer buf = new StringBuffer(); - if ((flags & PMaxSize) != 0) { + if ((flags & XUtilConstants.PMaxSize) != 0) { buf.append("PMaxSize "); } - if ((flags & PMinSize) != 0) { + if ((flags & XUtilConstants.PMinSize) != 0) { buf.append("PMinSize "); } - if ((flags & USSize) != 0) { + if ((flags & XUtilConstants.USSize) != 0) { buf.append("USSize "); } - if ((flags & USPosition) != 0) { + if ((flags & XUtilConstants.USPosition) != 0) { buf.append("USPosition "); } - if ((flags & PPosition) != 0) { + if ((flags & XUtilConstants.PPosition) != 0) { buf.append("PPosition "); } - if ((flags & PSize) != 0) { + if ((flags & XUtilConstants.PSize) != 0) { buf.append("PSize "); } - if ((flags & PWinGravity) != 0) { + if ((flags & XUtilConstants.PWinGravity) != 0) { buf.append("PWinGravity "); } return buf.toString(); From 5887f56e62e1861fae6bd0c09dbcd62f3863494d Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Tue, 8 Apr 2008 12:46:39 +0400 Subject: [PATCH 21/46] 6520716: event classes lack info about parameters Clarify allowed values for event constructors Reviewed-by: son, denis --- .../java/awt/dnd/DragGestureEvent.java | 34 +++- .../classes/java/awt/dnd/DropTargetEvent.java | 9 +- .../classes/java/awt/event/ActionEvent.java | 69 +++++-- .../java/awt/event/AdjustmentEvent.java | 62 ++++-- .../java/awt/event/ComponentEvent.java | 15 +- .../java/awt/event/ContainerEvent.java | 16 +- .../classes/java/awt/event/FocusEvent.java | 52 +++-- .../java/awt/event/HierarchyEvent.java | 99 +++++---- .../classes/java/awt/event/InputEvent.java | 37 +++- .../java/awt/event/InvocationEvent.java | 39 ++-- .../classes/java/awt/event/ItemEvent.java | 33 ++- .../classes/java/awt/event/KeyEvent.java | 87 +++++--- .../classes/java/awt/event/MouseEvent.java | 192 ++++++++++++------ .../java/awt/event/MouseWheelEvent.java | 2 +- .../classes/java/awt/event/PaintEvent.java | 18 +- .../classes/java/awt/event/TextEvent.java | 15 +- .../classes/java/awt/event/WindowEvent.java | 89 +++++--- 17 files changed, 591 insertions(+), 277 deletions(-) diff --git a/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java b/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java index 9996275225c..73885d436a1 100644 --- a/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DragGestureEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 1998-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-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 @@ -55,9 +55,19 @@ import java.io.ObjectOutputStream; * platform dependent drag initiating gesture has occurred * on the Component that it is tracking. * + * The {@code action} field of any {@code DragGestureEvent} instance should take one of the following + * values: + *

    + *
  • {@code DnDConstants.ACTION_COPY} + *
  • {@code DnDConstants.ACTION_MOVE} + *
  • {@code DnDConstants.ACTION_LINK} + *
+ * Assigning the value different from listed above will cause an unspecified behavior. + * * @see java.awt.dnd.DragGestureRecognizer * @see java.awt.dnd.DragGestureListener * @see java.awt.dnd.DragSource + * @see java.awt.dnd.DnDConstants */ public class DragGestureEvent extends EventObject { @@ -65,19 +75,25 @@ public class DragGestureEvent extends EventObject { private static final long serialVersionUID = 9080172649166731306L; /** - * Constructs a DragGestureEvent given the - * DragGestureRecognizer firing this event, - * an int representing - * the user's preferred action, a Point - * indicating the origin of the drag, and a List - * of events that comprise the gesture. + * Constructs a DragGestureEvent object given by the + * DragGestureRecognizer instance firing this event, + * an {@code act} parameter representing + * the user's preferred action, an {@code ori} parameter + * indicating the origin of the drag, and a {@code List} of + * events that comprise the gesture({@code evs} parameter). *

* @param dgr The DragGestureRecognizer firing this event - * @param act The the user's preferred action + * @param act The user's preferred action. + * For information on allowable values, see + * the class description for {@link DragGestureEvent} * @param ori The origin of the drag * @param evs The List of events that comprise the gesture *

- * @throws IllegalArgumentException if input parameters are {@code null} + * @throws IllegalArgumentException if any parameter equals {@code null} + * @throws IllegalArgumentException if the act parameter does not comply with + * the values given in the class + * description for {@link DragGestureEvent} + * @see java.awt.dnd.DnDConstants */ public DragGestureEvent(DragGestureRecognizer dgr, int act, Point ori, diff --git a/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java b/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java index 64d0b44d170..42fd397c701 100644 --- a/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java +++ b/jdk/src/share/classes/java/awt/dnd/DropTargetEvent.java @@ -45,10 +45,13 @@ public class DropTargetEvent extends java.util.EventObject { private static final long serialVersionUID = 2821229066521922993L; /** - * Construct a DropTargetEvent with - * a specified DropTargetContext. + * Construct a DropTargetEvent object with + * the specified DropTargetContext. *

- * @param dtc the DropTargetContext + * @param dtc The DropTargetContext + * @throws NullPointerException if {@code dtc} equals {@code null}. + * @see #getSource() + * @see #getDropTargetContext() */ public DropTargetEvent(DropTargetContext dtc) { diff --git a/jdk/src/share/classes/java/awt/event/ActionEvent.java b/jdk/src/share/classes/java/awt/event/ActionEvent.java index 41ed7d6488c..b81ab8a8f4f 100644 --- a/jdk/src/share/classes/java/awt/event/ActionEvent.java +++ b/jdk/src/share/classes/java/awt/event/ActionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -45,6 +45,10 @@ import java.awt.Event; * is therefore spared the details of processing individual mouse movements * and mouse clicks, and can instead process a "meaningful" (semantic) * event like "button pressed". + *

+ * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code ActionEvent} instance is not + * in the range from {@code ACTION_FIRST} to {@code ACTION_LAST}. * * @see ActionListener * @see Tutorial: Java 1.1 Event Model @@ -134,18 +138,22 @@ public class ActionEvent extends AWTEvent { /** * Constructs an ActionEvent object. *

- * Note that passing in an invalid id results in - * unspecified behavior. This method throws an + * This method throws an * IllegalArgumentException if source * is null. * A null command string is legal, * but not recommended. * - * @param source the object that originated the event - * @param id an integer that identifies the event - * @param command a string that may specify a command (possibly one + * @param source The object that originated the event + * @param id An integer that identifies the event. + * For information on allowable values, see + * the class description for {@link ActionEvent} + * @param command A string that may specify a command (possibly one * of several) associated with the event * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getActionCommand() */ public ActionEvent(Object source, int id, String command) { this(source, id, command, 0); @@ -154,19 +162,27 @@ public class ActionEvent extends AWTEvent { /** * Constructs an ActionEvent object with modifier keys. *

- * Note that passing in an invalid id results in - * unspecified behavior. This method throws an + * This method throws an * IllegalArgumentException if source * is null. * A null command string is legal, * but not recommended. * - * @param source the object that originated the event - * @param id an integer that identifies the event - * @param command a string that may specify a command (possibly one - * of several) associated with the event - * @param modifiers the modifier keys held down during this action + * @param source The object that originated the event + * @param id An integer that identifies the event. + * For information on allowable values, see + * the class description for {@link ActionEvent} + * @param command A string that may specify a command (possibly one + * of several) associated with the event + * @param modifiers The modifier keys down during event + * (shift, ctrl, alt, meta). + * Passing negative parameter is not recommended. + * Zero value means that no modifiers were passed * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getActionCommand() + * @see #getModifiers() */ public ActionEvent(Object source, int id, String command, int modifiers) { this(source, id, command, 0, modifiers); @@ -176,20 +192,31 @@ public class ActionEvent extends AWTEvent { * Constructs an ActionEvent object with the specified * modifier keys and timestamp. *

- * Note that passing in an invalid id results in - * unspecified behavior. This method throws an + * This method throws an * IllegalArgumentException if source * is null. * A null command string is legal, * but not recommended. * - * @param source the object that originated the event - * @param id an integer that identifies the event - * @param command a string that may specify a command (possibly one - * of several) associated with the event - * @param when the time the event occurred - * @param modifiers the modifier keys held down during this action + * @param source The object that originated the event + * @param id An integer that identifies the event. + * For information on allowable values, see + * the class description for {@link ActionEvent} + * @param command A string that may specify a command (possibly one + * of several) associated with the event + * @param modifiers The modifier keys down during event + * (shift, ctrl, alt, meta). + * Passing negative parameter is not recommended. + * Zero value means that no modifiers were passed + * @param when A long that gives the time the event occurred. + * Passing negative or zero value + * is not recommended * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getActionCommand() + * @see #getModifiers() + * @see #getWhen() * * @since 1.4 */ diff --git a/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java b/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java index b928899b2ec..590dae60ffb 100644 --- a/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java +++ b/jdk/src/share/classes/java/awt/event/AdjustmentEvent.java @@ -29,7 +29,25 @@ import java.awt.Adjustable; import java.awt.AWTEvent; /** - * The adjustment event emitted by Adjustable objects. + * The adjustment event emitted by Adjustable objects like + * {@link java.awt.Scrollbar} and {@link java.awt.ScrollPane}. + * When the user changes the value of the scrolling component, + * it receives an instance of {@code AdjustmentEvent}. + *

+ * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code AdjustmentEvent} instance is not + * in the range from {@code ADJUSTMENT_FIRST} to {@code ADJUSTMENT_LAST}. + *

+ * The {@code type} of any {@code AdjustmentEvent} instance takes one of the following + * values: + *

    + *
  • {@code UNIT_INCREMENT} + *
  • {@code UNIT_DECREMENT} + *
  • {@code BLOCK_INCREMENT} + *
  • {@code BLOCK_DECREMENT} + *
  • {@code TRACK} + *
+ * Assigning the value different from listed above will cause an unspecified behavior. * @see java.awt.Adjustable * @see AdjustmentListener * @@ -130,17 +148,24 @@ public class AdjustmentEvent extends AWTEvent { * Constructs an AdjustmentEvent object with the * specified Adjustable source, event type, * adjustment type, and value. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. * - * @param source the Adjustable object where the + * @param source The Adjustable object where the * event originated - * @param id the event type - * @param type the adjustment type - * @param value the current value of the adjustment + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link AdjustmentEvent} + * @param type An integer indicating the adjustment type. + * For information on allowable values, see + * the class description for {@link AdjustmentEvent} + * @param value The current value of the adjustment * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getAdjustmentType() + * @see #getValue() */ public AdjustmentEvent(Adjustable source, int id, int type, int value) { this(source, id, type, value, false); @@ -149,22 +174,29 @@ public class AdjustmentEvent extends AWTEvent { /** * Constructs an AdjustmentEvent object with the * specified Adjustable source, event type, adjustment type, and value. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. - * - * @param source the Adjustable object where the + * @param source The Adjustable object where the * event originated - * @param id the event type - * @param type the adjustment type - * @param value the current value of the adjustment - * @param isAdjusting true if the event is one + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link AdjustmentEvent} + * @param type An integer indicating the adjustment type. + * For information on allowable values, see + * the class description for {@link AdjustmentEvent} + * @param value The current value of the adjustment + * @param isAdjusting A boolean that equals true if the event is one * of a series of multiple adjusting events, * otherwise false * @throws IllegalArgumentException if source is null * @since 1.4 + * @see #getSource() + * @see #getID() + * @see #getAdjustmentType() + * @see #getValue() + * @see #getValueIsAdjusting() */ public AdjustmentEvent(Adjustable source, int id, int type, int value, boolean isAdjusting) { super(source, id); diff --git a/jdk/src/share/classes/java/awt/event/ComponentEvent.java b/jdk/src/share/classes/java/awt/event/ComponentEvent.java index a0264b81af0..bd51d262ef7 100644 --- a/jdk/src/share/classes/java/awt/event/ComponentEvent.java +++ b/jdk/src/share/classes/java/awt/event/ComponentEvent.java @@ -52,6 +52,10 @@ import java.awt.Rectangle; * (ComponentAdapter objects implement the * ComponentListener interface.) Each such listener object * gets this ComponentEvent when the event occurs. + *

+ * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code ComponentEvent} instance is not + * in the range from {@code COMPONENT_FIRST} to {@code COMPONENT_LAST}. * * @see ComponentAdapter * @see ComponentListener @@ -99,14 +103,17 @@ public class ComponentEvent extends AWTEvent { /** * Constructs a ComponentEvent object. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id an integer indicating the type of event + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link ComponentEvent} * @throws IllegalArgumentException if source is null + * @see #getComponent() + * @see #getID() */ public ComponentEvent(Component source, int id) { super(source, id); diff --git a/jdk/src/share/classes/java/awt/event/ContainerEvent.java b/jdk/src/share/classes/java/awt/event/ContainerEvent.java index f927312ba0b..16ef5b1c92f 100644 --- a/jdk/src/share/classes/java/awt/event/ContainerEvent.java +++ b/jdk/src/share/classes/java/awt/event/ContainerEvent.java @@ -45,6 +45,10 @@ import java.awt.Component; * (ContainerAdapter objects implement the * ContainerListener interface.) Each such listener object * gets this ContainerEvent when the event occurs. + *

+ * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code ContainerEvent} instance is not + * in the range from {@code CONTAINER_FIRST} to {@code CONTAINER_LAST}. * * @see ContainerAdapter * @see ContainerListener @@ -92,16 +96,20 @@ public class ContainerEvent extends ComponentEvent { /** * Constructs a ContainerEvent object. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component object (container) + * @param source The Component object (container) * that originated the event - * @param id an integer indicating the type of event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link ContainerEvent} * @param child the component that was added or removed * @throws IllegalArgumentException if source is null + * @see #getContainer() + * @see #getID() + * @see #getChild() */ public ContainerEvent(Component source, int id, Component child) { super(source, id); diff --git a/jdk/src/share/classes/java/awt/event/FocusEvent.java b/jdk/src/share/classes/java/awt/event/FocusEvent.java index 188ce44b720..ec018e0126e 100644 --- a/jdk/src/share/classes/java/awt/event/FocusEvent.java +++ b/jdk/src/share/classes/java/awt/event/FocusEvent.java @@ -50,6 +50,10 @@ import sun.awt.SunToolkit; * reactivated. Both permanent and temporary focus events are delivered using * the FOCUS_GAINED and FOCUS_LOST event ids; the level may be distinguished in * the event using the isTemporary() method. + *

+ * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code FocusEvent} instance is not + * in the range from {@code FOCUS_FIRST} to {@code FOCUS_LAST}. * * @see FocusAdapter * @see FocusListener @@ -121,18 +125,23 @@ public class FocusEvent extends ComponentEvent { * application, with a Java application in a different VM, * or with no other Component, then the opposite * Component is null. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id FOCUS_GAINED or FOCUS_LOST - * @param temporary true if the focus change is temporary; + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link FocusEvent} + * @param temporary Equals true if the focus change is temporary; * false otherwise - * @param opposite the other Component involved in the focus change, + * @param opposite The other Component involved in the focus change, * or null - * @throws IllegalArgumentException if source is null + * @throws IllegalArgumentException if source equals {@code null} + * @see #getSource() + * @see #getID() + * @see #isTemporary() + * @see #getOppositeComponent() * @since 1.4 */ public FocusEvent(Component source, int id, boolean temporary, @@ -145,16 +154,20 @@ public class FocusEvent extends ComponentEvent { /** * Constructs a FocusEvent object and identifies * whether or not the change is temporary. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id an integer indicating the type of event - * @param temporary true if the focus change is temporary; + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link FocusEvent} + * @param temporary Equals true if the focus change is temporary; * false otherwise - * @throws IllegalArgumentException if source is null + * @throws IllegalArgumentException if source equals {@code null} + * @see #getSource() + * @see #getID() + * @see #isTemporary() */ public FocusEvent(Component source, int id, boolean temporary) { this(source, id, temporary, null); @@ -163,14 +176,17 @@ public class FocusEvent extends ComponentEvent { /** * Constructs a FocusEvent object and identifies it * as a permanent change in focus. - *

Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id an integer indicating the type of event - * @throws IllegalArgumentException if source is null + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link FocusEvent} + * @throws IllegalArgumentException if source equals {@code null} + * @see #getSource() + * @see #getID() */ public FocusEvent(Component source, int id) { this(source, id, false); diff --git a/jdk/src/share/classes/java/awt/event/HierarchyEvent.java b/jdk/src/share/classes/java/awt/event/HierarchyEvent.java index d57256a45a2..6ed6ab18edb 100644 --- a/jdk/src/share/classes/java/awt/event/HierarchyEvent.java +++ b/jdk/src/share/classes/java/awt/event/HierarchyEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 1999-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1999-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 @@ -31,7 +31,7 @@ import java.awt.Container; /** * An event which indicates a change to the Component - * hierarchy to which a Component belongs. + * hierarchy to which Component belongs. *

    *
  • Hierarchy Change Events (HierarchyListener) *
      @@ -58,16 +58,30 @@ import java.awt.Container; * Container is added, removed, moved, or resized, and passed down the * hierarchy. It is also generated by a Component object when that object's * addNotify, removeNotify, show, or - * hide method is called. ANCESTOR_MOVED and ANCESTOR_RESIZED + * hide method is called. The {@code ANCESTOR_MOVED} and + * {@code ANCESTOR_RESIZED} * events are dispatched to every HierarchyBoundsListener or * HierarchyBoundsAdapter object which registered to receive * such events using the Component's addHierarchyBoundsListener * method. (HierarchyBoundsAdapter objects implement the - * HierarchyBoundsListener interface.) HIERARCHY_CHANGED events are + * HierarchyBoundsListener interface.) The {@code HIERARCHY_CHANGED} events are * dispatched to every HierarchyListener object which registered * to receive such events using the Component's addHierarchyListener * method. Each such listener object gets this HierarchyEvent * when the event occurs. + *

      + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code HierarchyEvent} instance is not + * in the range from {@code HIERARCHY_FIRST} to {@code HIERARCHY_LAST}. + *
      + * The {@code changeFlags} parameter of any {@code HierarchyEvent} instance takes one of the following + * values: + *

        + *
      • {@code HierarchyEvent.PARENT_CHANGED} + *
      • {@code HierarchyEvent.DISPLAYABILITY_CHANGED} + *
      • {@code HierarchyEvent.SHOWING_CHANGED} + *
      + * Assigning the value different from listed above will cause unspecified behavior. * * @author David Mendenhall * @see HierarchyListener @@ -108,20 +122,20 @@ public class HierarchyEvent extends AWTEvent { public static final int HIERARCHY_LAST = ANCESTOR_RESIZED; /** - * Indicates that the HIERARCHY_CHANGED event + * A change flag indicates that the HIERARCHY_CHANGED event * was generated by a reparenting operation. */ public static final int PARENT_CHANGED = 0x1; /** - * Indicates that the HIERARCHY_CHANGED event - * was generated due to a change in the displayability - * of the hierarchy. To discern the - * current displayability of the hierarchy, call - * Component.isDisplayable. Displayability changes occur - * in response to explicit or implicit calls to + * A change flag indicates that the HIERARCHY_CHANGED event + * was generated due to the changing of the hierarchy displayability. + * To discern the + * current displayability of the hierarchy, call the + * Component.isDisplayable method. Displayability changes occur + * in response to explicit or implicit calls of the * Component.addNotify and - * Component.removeNotify. + * Component.removeNotify methods. * * @see java.awt.Component#isDisplayable() * @see java.awt.Component#addNotify() @@ -130,15 +144,15 @@ public class HierarchyEvent extends AWTEvent { public static final int DISPLAYABILITY_CHANGED = 0x2; /** - * Indicates that the HIERARCHY_CHANGED event - * was generated due to a change in the showing state - * of the hierarchy. To discern the - * current showing state of the hierarchy, call - * Component.isShowing. Showing state changes occur + * A change flag indicates that the HIERARCHY_CHANGED event + * was generated due to the changing of the hierarchy showing state. + * To discern the + * current showing state of the hierarchy, call the + * Component.isShowing method. Showing state changes occur * when either the displayability or visibility of the * hierarchy occurs. Visibility changes occur in response to explicit - * or implicit calls to Component.show and - * Component.hide. + * or implicit calls of the Component.show and + * Component.hide methods. * * @see java.awt.Component#isShowing() * @see java.awt.Component#addNotify() @@ -155,20 +169,26 @@ public class HierarchyEvent extends AWTEvent { /** * Constructs an HierarchyEvent object to identify a * change in the Component hierarchy. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component object that + * @param source The Component object that * originated the event - * @param id an integer indicating the type of event - * @param changed the Component at the top of + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link HierarchyEvent} + * @param changed The Component at the top of * the hierarchy which was changed - * @param changedParent the parent of changed; this + * @param changedParent The parent of the changed component. + * This * may be the parent before or after the * change, depending on the type of change - * @throws IllegalArgumentException if source is null + * @throws IllegalArgumentException if source is {@code null} + * @see #getSource() + * @see #getID() + * @see #getChanged() + * @see #getChangedParent() */ public HierarchyEvent(Component source, int id, Component changed, Container changedParent) { @@ -180,23 +200,32 @@ public class HierarchyEvent extends AWTEvent { /** * Constructs an HierarchyEvent object to identify * a change in the Component hierarchy. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component object that + * @param source The Component object that * originated the event - * @param id an integer indicating the type of event - * @param changed the Component at the top + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link HierarchyEvent} + * @param changed The Component at the top * of the hierarchy which was changed - * @param changedParent the parent of changed; this + * @param changedParent The parent of the changed component. + * This * may be the parent before or after the * change, depending on the type of change - * @param changeFlags a bitmask which indicates the type(s) of - * HIERARCHY_CHANGED events - * represented in this event object + * @param changeFlags A bitmask which indicates the type(s) of + * the HIERARCHY_CHANGED events + * represented in this event object. + * For information on allowable values, see + * the class description for {@link HierarchyEvent} * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getChanged() + * @see #getChangedParent() + * @see #getChangeFlags() */ public HierarchyEvent(Component source, int id, Component changed, Container changedParent, long changeFlags) { diff --git a/jdk/src/share/classes/java/awt/event/InputEvent.java b/jdk/src/share/classes/java/awt/event/InputEvent.java index 45b1f87e40e..0c35c2be464 100644 --- a/jdk/src/share/classes/java/awt/event/InputEvent.java +++ b/jdk/src/share/classes/java/awt/event/InputEvent.java @@ -208,17 +208,32 @@ public abstract class InputEvent extends ComponentEvent { /** * Constructs an InputEvent object with the specified source component, * modifiers, and type. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * * @param source the object where the event originated - * @param id the event type - * @param when the time the event occurred - * @param modifiers represents the modifier keys and mouse buttons down - * while the event occurred + * @param id the integer that identifies the event type. + * It is allowed to pass as parameter any value that + * allowed for some subclass of {@code InputEvent} class. + * Passing in the value different from those values result + * in unspecified behavior + * @param when a long int that gives the time the event occurred. + * Passing negative or zero value + * is not recommended + * @param modifiers the modifier keys down during event (e.g. shift, ctrl, + * alt, meta) + * Passing negative parameter is not recommended. + * Zero value means no modifiers. + * Either extended _DOWN_MASK or old _MASK modifiers + * should be used, but both models should not be mixed + * in one event. Use of the extended modifiers is + * preferred * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getWhen() + * @see #getModifiers() */ InputEvent(Component source, int id, long when, int modifiers) { super(source, id); @@ -285,7 +300,8 @@ public abstract class InputEvent extends ComponentEvent { } /** - * Returns the timestamp of when this event occurred. + * Returns the difference in milliseconds between the timestamp of when this event occurred and + * midnight, January 1, 1970 UTC. */ public long getWhen() { return when; @@ -358,7 +374,12 @@ public abstract class InputEvent extends ComponentEvent { * Returns a String describing the extended modifier keys and * mouse buttons, such as "Shift", "Button1", or "Ctrl+Shift". * These strings can be localized by changing the - * awt.properties file. + * awt.properties file. + *

      + * Note that passing negative parameter is incorrect, + * and will cause the returning an unspecified string. + * Zero parameter means that no modifiers were passed and will + * cause the returning an empty string. * * @param modifiers a modifier mask describing the extended * modifier keys and mouse buttons for the event diff --git a/jdk/src/share/classes/java/awt/event/InvocationEvent.java b/jdk/src/share/classes/java/awt/event/InvocationEvent.java index 705f87a12e4..0959a86cb35 100644 --- a/jdk/src/share/classes/java/awt/event/InvocationEvent.java +++ b/jdk/src/share/classes/java/awt/event/InvocationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 1998-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-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 @@ -39,6 +39,10 @@ import java.awt.AWTEvent; * can use this fact to write replacement functions for invokeLater * and invokeAndWait without writing special-case code * in any AWTEventListener objects. + *

      + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code InvocationEvent} instance is not + * in the range from {@code INVOCATION_FIRST} to {@code INVOCATION_LAST}. * * @author Fred Ecks * @author David Mendenhall @@ -123,12 +127,13 @@ public class InvocationEvent extends AWTEvent implements ActiveEvent { *

      This method throws an IllegalArgumentException * if source is null. * - * @param source the Object that originated the event - * @param runnable the Runnable whose run + * @param source The Object that originated the event + * @param runnable The Runnable whose run * method will be executed * @throws IllegalArgumentException if source is null * - * @see #InvocationEvent(Object, Runnable, Object, boolean) + * @see #getSource() + * @see #InvocationEvent(Object, Runnable, Object, boolean) */ public InvocationEvent(Object source, Runnable runnable) { this(source, runnable, null, false); @@ -147,15 +152,15 @@ public class InvocationEvent extends AWTEvent implements ActiveEvent { *

      This method throws an IllegalArgumentException * if source is null. * - * @param source the Object that originated + * @param source The Object that originated * the event - * @param runnable the Runnable whose + * @param runnable The Runnable whose * run method will be * executed - * @param notifier the Object whose notifyAll + * @param notifier The {@code Object} whose notifyAll * method will be called after * Runnable.run has returned - * @param catchThrowables specifies whether dispatch + * @param catchThrowables Specifies whether dispatch * should catch Throwable when executing * the Runnable's run * method, or should instead propagate those @@ -163,6 +168,7 @@ public class InvocationEvent extends AWTEvent implements ActiveEvent { * dispatch loop * @throws IllegalArgumentException if source is null * + * @see #getSource() * @see #InvocationEvent(Object, int, Runnable, Object, boolean) */ public InvocationEvent(Object source, Runnable runnable, Object notifier, @@ -176,26 +182,29 @@ public class InvocationEvent extends AWTEvent implements ActiveEvent { * method when dispatched. If notifier is non-null, * notifyAll will be called on it * immediately after run returns. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * - * @param source the Object that originated + * @param source The Object that originated * the event - * @param id the ID for the event - * @param runnable the Runnable whose + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link InvocationEvent} + * @param runnable The Runnable whose * run method will be executed - * @param notifier the Object whose notifyAll + * @param notifier The Object whose notifyAll * method will be called after * Runnable.run has returned - * @param catchThrowables specifies whether dispatch + * @param catchThrowables Specifies whether dispatch * should catch Throwable when executing the * Runnable's run * method, or should instead propagate those * Throwables to the EventDispatchThread's * dispatch loop * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() */ protected InvocationEvent(Object source, int id, Runnable runnable, Object notifier, boolean catchThrowables) { diff --git a/jdk/src/share/classes/java/awt/event/ItemEvent.java b/jdk/src/share/classes/java/awt/event/ItemEvent.java index 7b37f3ed0c4..156b0614618 100644 --- a/jdk/src/share/classes/java/awt/event/ItemEvent.java +++ b/jdk/src/share/classes/java/awt/event/ItemEvent.java @@ -41,6 +41,18 @@ import java.awt.ItemSelectable; * spared the details of processing individual mouse movements and mouse * clicks, and can instead process a "meaningful" (semantic) event like * "item selected" or "item deselected". + *

      + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code ItemEvent} instance is not + * in the range from {@code ITEM_FIRST} to {@code ITEM_LAST}. + *

      + * The {@code stateChange} of any {@code ItemEvent} instance takes one of the following + * values: + *

        + *
      • {@code ItemEvent.SELECTED} + *
      • {@code ItemEvent.DESELECTED} + *
      + * Assigning the value different from listed above will cause an unspecified behavior. * * @author Carl Quinn * @@ -101,19 +113,24 @@ public class ItemEvent extends AWTEvent { /** * Constructs an ItemEvent object. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * - * @param source the ItemSelectable object + * @param source The ItemSelectable object * that originated the event - * @param id an integer that identifies the event type - * @param item an object -- the item affected by the event - * @param stateChange - * an integer that indicates whether the item was - * selected or deselected + * @param id The integer that identifies the event type. + * For information on allowable values, see + * the class description for {@link ItemEvent} + * @param item An object -- the item affected by the event + * @param stateChange An integer that indicates whether the item was + * selected or deselected. + * For information on allowable values, see + * the class description for {@link ItemEvent} * @throws IllegalArgumentException if source is null + * @see #getItemSelectable() + * @see #getID() + * @see #getStateChange() */ public ItemEvent(ItemSelectable source, int id, Object item, int stateChange) { super(source, id); diff --git a/jdk/src/share/classes/java/awt/event/KeyEvent.java b/jdk/src/share/classes/java/awt/event/KeyEvent.java index 556ceb28b2b..03967570297 100644 --- a/jdk/src/share/classes/java/awt/event/KeyEvent.java +++ b/jdk/src/share/classes/java/awt/event/KeyEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -128,6 +128,10 @@ import java.io.ObjectInputStream; * (VK_ENTER, VK_BACK_SPACE, and VK_TAB), do not rely on the values of the VK_ * constants. Sun reserves the right to change these values as needed * to accomodate a wider range of keyboards in the future. + *

      + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code KeyEvent} instance is not + * in the range from {@code KEY_FIRST} to {@code KEY_LAST}. * * @author Carl Quinn * @author Amy Fowler @@ -914,27 +918,32 @@ public class KeyEvent extends InputEvent { /** * Constructs a KeyEvent object. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id an integer identifying the type of event - * @param when a long integer that specifies the time the event - * occurred - * @param modifiers the modifier keys down during event (shift, ctrl, - * alt, meta) - * Either extended _DOWN_MASK or old _MASK modifiers - * should be used, but both models should not be mixed - * in one event. Use of the extended modifiers is - * preferred. - * @param keyCode the integer code for an actual key, or VK_UNDEFINED + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link KeyEvent} + * @param when A long integer that specifies the time the event + * occurred. + * Passing negative or zero value + * is not recommended + * @param modifiers The modifier keys down during event (shift, ctrl, + * alt, meta). + * Passing negative value + * is not recommended. + * Zero value means that no modifiers were passed. + * Use either an extended _DOWN_MASK or old _MASK modifiers, + * however do not mix models in the one event. + * The extended modifiers are preferred for using + * @param keyCode The integer code for an actual key, or VK_UNDEFINED * (for a key-typed event) - * @param keyChar the Unicode character generated by this event, or + * @param keyChar The Unicode character generated by this event, or * CHAR_UNDEFINED (for key-pressed and key-released * events which do not map to a valid Unicode character) - * @param keyLocation identifies the key location. The only legal + * @param keyLocation Identifies the key location. The only legal * values are KEY_LOCATION_UNKNOWN, * KEY_LOCATION_STANDARD, KEY_LOCATION_LEFT, * KEY_LOCATION_RIGHT, and KEY_LOCATION_NUMPAD. @@ -948,6 +957,13 @@ public class KeyEvent extends InputEvent { * or if keyLocation is not one of the legal * values enumerated above. * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getWhen() + * @see #getModifiers() + * @see #getKeyCode() + * @see #getKeyChar() + * @see #getKeyLocation() * @since 1.4 */ public KeyEvent(Component source, int id, long when, int modifiers, @@ -982,24 +998,29 @@ public class KeyEvent extends InputEvent { /** * Constructs a KeyEvent object. - *

      Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

      This method throws an * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id an integer identifying the type of event - * @param when a long integer that specifies the time the event - * occurred - * @param modifiers the modifier keys down during event (shift, ctrl, - * alt, meta) - * Either extended _DOWN_MASK or old _MASK modifiers - * should be used, but both models should not be mixed - * in one event. Use of the extended modifiers is - * preferred. - * @param keyCode the integer code for an actual key, or VK_UNDEFINED + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link KeyEvent} + * @param when A long integer that specifies the time the event + * occurred. + * Passing negative or zero value + * is not recommended + * @param modifiers The modifier keys down during event (shift, ctrl, + * alt, meta). + * Passing negative value + * is not recommended. + * Zero value means that no modifiers were passed. + * Use either an extended _DOWN_MASK or old _MASK modifiers, + * however do not mix models in the one event. + * The extended modifiers are preferred for using + * @param keyCode The integer code for an actual key, or VK_UNDEFINED * (for a key-typed event) - * @param keyChar the Unicode character generated by this event, or + * @param keyChar The Unicode character generated by this event, or * CHAR_UNDEFINED (for key-pressed and key-released * events which do not map to a valid Unicode character) * @throws IllegalArgumentException if id is @@ -1008,6 +1029,12 @@ public class KeyEvent extends InputEvent { * KEY_TYPED and keyCode is not * VK_UNDEFINED * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getWhen() + * @see #getModifiers() + * @see #getKeyCode() + * @see #getKeyChar() */ public KeyEvent(Component source, int id, long when, int modifiers, int keyCode, char keyChar) { diff --git a/jdk/src/share/classes/java/awt/event/MouseEvent.java b/jdk/src/share/classes/java/awt/event/MouseEvent.java index d546be5ec8e..a9aed6add19 100644 --- a/jdk/src/share/classes/java/awt/event/MouseEvent.java +++ b/jdk/src/share/classes/java/awt/event/MouseEvent.java @@ -159,6 +159,11 @@ import java.awt.IllegalComponentStateException; * The reported coordinates for mouse drag events are clipped to fit within the * bounds of the virtual device associated with the Component. *

    + *

    + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code MouseEvent} instance is not + * in the range from {@code MOUSE_FIRST} to {@code MOUSE_LAST}-1 + * ({@code MOUSE_WHEEL} is not acceptable). * * @author Carl Quinn * @@ -418,8 +423,7 @@ public class MouseEvent extends InputEvent { * specified source component, * type, modifiers, coordinates, and click count. *

    - * Note that passing in an invalid id results in - * unspecified behavior. Creating an invalid event (such + * Creating an invalid event (such * as by using more than one of the old _MASKs, or modifier/button * values which don't match) results in unspecified behavior. * An invocation of the form @@ -435,28 +439,44 @@ public class MouseEvent extends InputEvent { * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id the integer that identifies the event - * @param when a long int that gives the time the event occurred - * @param modifiers the modifier keys down during event (e.g. shift, ctrl, + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link MouseEvent} + * @param when A long integer that gives the time the event occurred. + * Passing negative or zero value + * is not recommended + * @param modifiers The modifier keys down during event (e.g. shift, ctrl, * alt, meta) - * Either extended _DOWN_MASK or old _MASK modifiers - * should be used, but both models should not be mixed - * in one event. Use of the extended modifiers is - * preferred. - * @param x the horizontal x coordinate for the mouse location - * @param y the vertical y coordinate for the mouse location - * @param clickCount the number of mouse clicks associated with event - * @param popupTrigger a boolean, true if this event is a trigger for a - * popup menu - * @param button which of the mouse buttons has changed state. - * NOBUTTON, - * BUTTON1, - * BUTTON2 or - * BUTTON3. + * Passing negative parameter + * is not recommended. + * Zero value means that no modifiers were passed. + * Use either an extended _DOWN_MASK or old _MASK modifiers, + * however do not mix models in the one event. + * The extended modifiers are preferred for using + * @param x The horizontal x coordinate for the mouse location. + * It is allowed to pass negative values + * @param y The vertical y coordinate for the mouse location. + * It is allowed to pass negative values + * @param clickCount The number of mouse clicks associated with event. + * Passing negative value + * is not recommended + * @param popupTrigger A boolean that equals {@code true} if this event + * is a trigger for a popup menu + * @param button An integer that indicates, which of the mouse buttons has + * changed its state * @throws IllegalArgumentException if an invalid button * value is passed in * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getWhen() + * @see #getModifiers() + * @see #getX() + * @see #getY() + * @see #getClickCount() + * @see #isPopupTrigger() + * @see #getButton() * @since 1.4 */ public MouseEvent(Component source, int id, long when, int modifiers, @@ -479,8 +499,6 @@ public class MouseEvent extends InputEvent { * Constructs a MouseEvent object with the * specified source component, * type, modifiers, coordinates, and click count. - *

    Note that passing in an invalid id results in - * unspecified behavior. * An invocation of the form * MouseEvent(source, id, when, modifiers, x, y, clickCount, popupTrigger) * behaves in exactly the same way as the invocation @@ -493,21 +511,39 @@ public class MouseEvent extends InputEvent { * This method throws an IllegalArgumentException * if source is null. * - * @param source the Component that originated the event - * @param id the integer that identifies the event - * @param when a long int that gives the time the event occurred - * @param modifiers the modifier keys down during event (e.g. shift, ctrl, + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link MouseEvent} + * @param when A long integer that gives the time the event occurred. + * Passing negative or zero value + * is not recommended + * @param modifiers The modifier keys down during event (e.g. shift, ctrl, * alt, meta) - * Either extended _DOWN_MASK or old _MASK modifiers - * should be used, but both models should not be mixed - * in one event. Use of the extended modifiers is - * preferred. - * @param x the horizontal x coordinate for the mouse location - * @param y the vertical y coordinate for the mouse location - * @param clickCount the number of mouse clicks associated with event - * @param popupTrigger a boolean, true if this event is a trigger for a - * popup menu + * Passing negative parameter + * is not recommended. + * Zero value means that no modifiers were passed. + * Use either an extended _DOWN_MASK or old _MASK modifiers, + * however do not mix models in the one event. + * The extended modifiers are preferred for using + * @param x The horizontal x coordinate for the mouse location. + * It is allowed to pass negative values + * @param y The vertical y coordinate for the mouse location. + * It is allowed to pass negative values + * @param clickCount The number of mouse clicks associated with event. + * Passing negative value + * is not recommended + * @param popupTrigger A boolean that equals {@code true} if this event + * is a trigger for a popup menu * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getWhen() + * @see #getModifiers() + * @see #getX() + * @see #getY() + * @see #getClickCount() + * @see #isPopupTrigger() */ public MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger) { @@ -520,8 +556,7 @@ public class MouseEvent extends InputEvent { * specified source component, * type, modifiers, coordinates, absolute coordinates, and click count. *

    - * Note that passing in an invalid id results in - * unspecified behavior. Creating an invalid event (such + * Creating an invalid event (such * as by using more than one of the old _MASKs, or modifier/button * values which don't match) results in unspecified behavior. * Even if inconsistent values for relative and absolute coordinates are @@ -531,30 +566,50 @@ public class MouseEvent extends InputEvent { * IllegalArgumentException if source * is null. * - * @param source the Component that originated the event - * @param id the integer that identifies the event - * @param when a long int that gives the time the event occurred - * @param modifiers the modifier keys down during event (e.g. shift, ctrl, + * @param source The Component that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link MouseEvent} + * @param when A long integer that gives the time the event occurred. + * Passing negative or zero value + * is not recommended + * @param modifiers The modifier keys down during event (e.g. shift, ctrl, * alt, meta) - * Either extended _DOWN_MASK or old _MASK modifiers - * should be used, but both models should not be mixed - * in one event. Use of the extended modifiers is - * preferred. - * @param x the horizontal x coordinate for the mouse location - * @param y the vertical y coordinate for the mouse location - * @param xAbs the absolute horizontal x coordinate for the mouse location - * @param yAbs the absolute vertical y coordinate for the mouse location - * @param clickCount the number of mouse clicks associated with event - * @param popupTrigger a boolean, true if this event is a trigger for a - * popup menu - * @param button which of the mouse buttons has changed state. - * NOBUTTON, - * BUTTON1, - * BUTTON2 or - * BUTTON3. + * Passing negative parameter + * is not recommended. + * Zero value means that no modifiers were passed. + * Use either an extended _DOWN_MASK or old _MASK modifiers, + * however do not mix models in the one event. + * The extended modifiers are preferred for using + * @param x The horizontal x coordinate for the mouse location. + * It is allowed to pass negative values + * @param y The vertical y coordinate for the mouse location. + * It is allowed to pass negative values + * @param xAbs The absolute horizontal x coordinate for the mouse location + * It is allowed to pass negative values + * @param yAbs The absolute vertical y coordinate for the mouse location + * It is allowed to pass negative values + * @param clickCount The number of mouse clicks associated with event. + * Passing negative value + * is not recommended + * @param popupTrigger A boolean that equals {@code true} if this event + * is a trigger for a popup menu + * @param button An integer that indicates, which of the mouse buttons has + * changed its state * @throws IllegalArgumentException if an invalid button * value is passed in * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getWhen() + * @see #getModifiers() + * @see #getX() + * @see #getY() + * @see #getXOnScreen() + * @see #getYOnScreen() + * @see #getClickCount() + * @see #isPopupTrigger() + * @see #getButton() * @since 1.6 */ public MouseEvent(Component source, int id, long when, int modifiers, @@ -675,21 +730,26 @@ public class MouseEvent extends InputEvent { } /** - * Returns a String describing the modifier keys and + * Returns a String instance describing the modifier keys and * mouse buttons that were down during the event, such as "Shift", * or "Ctrl+Shift". These strings can be localized by changing * the awt.properties file. *

    - * Note that InputEvent.ALT_MASK and - * InputEvent.BUTTON2_MASK have the same value, - * so the string "Alt" is returned for both modifiers. Likewise, - * InputEvent.META_MASK and - * InputEvent.BUTTON3_MASK have the same value, - * so the string "Meta" is returned for both modifiers. + * Note that the InputEvent.ALT_MASK and + * InputEvent.BUTTON2_MASK have equal values, + * so the "Alt" string is returned for both modifiers. Likewise, + * the InputEvent.META_MASK and + * InputEvent.BUTTON3_MASK have equal values, + * so the "Meta" string is returned for both modifiers. + *

    + * Note that passing negative parameter is incorrect, + * and will cause the returning an unspecified string. + * Zero parameter means that no modifiers were passed and will + * cause the returning an empty string. * - * @param modifiers a modifier mask describing the modifier keys and + * @param modifiers A modifier mask describing the modifier keys and * mouse buttons that were down during the event - * @return string a text description of the combination of modifier + * @return string string text description of the combination of modifier * keys and mouse buttons that were down during the event * @see InputEvent#getModifiersExText(int) * @since 1.4 diff --git a/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java b/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java index a1c5b2ebb91..19c46fe7f41 100644 --- a/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java +++ b/jdk/src/share/classes/java/awt/event/MouseWheelEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-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 diff --git a/jdk/src/share/classes/java/awt/event/PaintEvent.java b/jdk/src/share/classes/java/awt/event/PaintEvent.java index beafed7f8eb..1826cce3578 100644 --- a/jdk/src/share/classes/java/awt/event/PaintEvent.java +++ b/jdk/src/share/classes/java/awt/event/PaintEvent.java @@ -36,6 +36,10 @@ import java.awt.Rectangle; * designed to be used with the Event Listener model; programs * should continue to override paint/update methods in order * render themselves properly. + *

    + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code PaintEvent} instance is not + * in the range from {@code PAINT_FIRST} to {@code PAINT_LAST}. * * @author Amy Fowler * @since 1.1 @@ -82,15 +86,19 @@ public class PaintEvent extends ComponentEvent { /** * Constructs a PaintEvent object with the specified * source component and type. - *

    Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

    This method throws an * IllegalArgumentException if source * is null. * - * @param source the object where the event originated - * @param id the event type - * @param updateRect the rectangle area which needs to be repainted + * @param source The object where the event originated + * @param id The integer that identifies the event type. + * For information on allowable values, see + * the class description for {@link PaintEvent} + * @param updateRect The rectangle area which needs to be repainted * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() + * @see #getUpdateRect() */ public PaintEvent(Component source, int id, Rectangle updateRect) { super(source, id); diff --git a/jdk/src/share/classes/java/awt/event/TextEvent.java b/jdk/src/share/classes/java/awt/event/TextEvent.java index 0c7aadca177..36b62d40d01 100644 --- a/jdk/src/share/classes/java/awt/event/TextEvent.java +++ b/jdk/src/share/classes/java/awt/event/TextEvent.java @@ -38,6 +38,10 @@ import java.awt.AWTEvent; * this TextEvent when the event occurs. The listener is * spared the details of processing individual mouse movements and key strokes * Instead, it can process a "meaningful" (semantic) event like "text changed". + *

    + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code TextEvent} instance is not + * in the range from {@code TEXT_FIRST} to {@code TEXT_LAST}. * * @author Georges Saab * @@ -71,15 +75,18 @@ public class TextEvent extends AWTEvent { /** * Constructs a TextEvent object. - *

    Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

    This method throws an * IllegalArgumentException if source * is null. * - * @param source the (TextComponent) object that + * @param source The (TextComponent) object that * originated the event - * @param id an integer that identifies the event type + * @param id An integer that identifies the event type. + * For information on allowable values, see + * the class description for {@link TextEvent} * @throws IllegalArgumentException if source is null + * @see #getSource() + * @see #getID() */ public TextEvent(Object source, int id) { super(source, id); diff --git a/jdk/src/share/classes/java/awt/event/WindowEvent.java b/jdk/src/share/classes/java/awt/event/WindowEvent.java index 090ba017f55..a662aab92e4 100644 --- a/jdk/src/share/classes/java/awt/event/WindowEvent.java +++ b/jdk/src/share/classes/java/awt/event/WindowEvent.java @@ -41,6 +41,10 @@ import sun.awt.SunToolkit; * (WindowAdapter objects implement the * WindowListener interface.) Each such listener object * gets this WindowEvent when the event occurs. + *

    + * An unspecified behavior will be caused if the {@code id} parameter + * of any particular {@code WindowEvent} instance is not + * in the range from {@code WINDOW_FIRST} to {@code WINDOW_LAST}. * * @author Carl Quinn * @author Amy Fowler @@ -170,20 +174,27 @@ public class WindowEvent extends ComponentEvent { /** * Constructs a WindowEvent object. - *

    Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

    This method throws an * IllegalArgumentException if source * is null. * - * @param source the Window object + * @param source The Window object * that originated the event - * @param id an integer indicating the type of event. - * @param opposite the other window involved in the focus or activation + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link WindowEvent} + * @param opposite The other window involved in the focus or activation * change, or null - * @param oldState previous state of the window for window state - * change event - * @param newState new state of the window for window state change event + * @param oldState Previous state of the window for window state change event. + * See {@code #getOldState()} for allowable values + * @param newState New state of the window for window state change event. + * See {@code #getNewState()} for allowable values * @throws IllegalArgumentException if source is null + * @see #getWindow() + * @see #getID() + * @see #getOppositeWindow() + * @see #getOldState() + * @see #getNewState() * @since 1.4 */ public WindowEvent(Window source, int id, Window opposite, @@ -209,24 +220,28 @@ public class WindowEvent extends ComponentEvent { * If this focus change occurs with a native application, with a * Java application in a different VM, or with no other * Window, then the opposite Window is null. - *

    Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

    This method throws an * IllegalArgumentException if source * is null. * - * @param source the Window object that + * @param source The Window object that * originated the event - * @param id WINDOW_ACTIVATED, - * WINDOW_DEACTIVATED, - * WINDOW_GAINED_FOCUS, - * or WINDOW_LOST_FOCUS. It is - * expected that this constructor will not be used for - * other WindowEvent types because the - * opposite Window of such events - * will always be null - * @param opposite the other Window involved in the + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link WindowEvent}. + * It is expected that this constructor will not + * be used for other then + * {@code WINDOW_ACTIVATED},{@code WINDOW_DEACTIVATED}, + * {@code WINDOW_GAINED_FOCUS}, or {@code WINDOW_LOST_FOCUS}. + * {@code WindowEvent} types, + * because the opposite Window of other event types + * will always be {@code null}. + * @param opposite The other Window involved in the * focus or activation change, or null * @throws IllegalArgumentException if source is null + * @see #getWindow() + * @see #getID() + * @see #getOppositeWindow() * @since 1.4 */ public WindowEvent(Window source, int id, Window opposite) { @@ -236,21 +251,30 @@ public class WindowEvent extends ComponentEvent { /** * Constructs a WindowEvent object with the specified * previous and new window states. - *

    Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

    This method throws an * IllegalArgumentException if source * is null. * - * @param source the Window object + * @param source The Window object * that originated the event - * @param id WINDOW_STATE_CHANGED event type. + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link WindowEvent}. * It is expected that this constructor will not - * be used for other WindowEvent + * be used for other then + * {@code WINDOW_STATE_CHANGED} + * {@code WindowEvent} * types, because the previous and new window * states are meaningless for other event types. - * @param oldState an integer representing the previous window state - * @param newState an integer representing the new window state + * @param oldState An integer representing the previous window state. + * See {@code #getOldState()} for allowable values + * @param newState An integer representing the new window state. + * See {@code #getNewState()} for allowable values * @throws IllegalArgumentException if source is null + * @see #getWindow() + * @see #getID() + * @see #getOldState() + * @see #getNewState() * @since 1.4 */ public WindowEvent(Window source, int id, int oldState, int newState) { @@ -259,14 +283,17 @@ public class WindowEvent extends ComponentEvent { /** * Constructs a WindowEvent object. - *

    Note that passing in an invalid id results in - * unspecified behavior. This method throws an + *

    This method throws an * IllegalArgumentException if source * is null. * - * @param source the Window object that originated the event - * @param id an integer indicating the type of event + * @param source The Window object that originated the event + * @param id An integer indicating the type of event. + * For information on allowable values, see + * the class description for {@link WindowEvent}. * @throws IllegalArgumentException if source is null + * @see #getWindow() + * @see #getID() */ public WindowEvent(Window source, int id) { this(source, id, null, 0, 0); From 06e38823546fdebab59972e195f296a5eaeee8d4 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Tue, 8 Apr 2008 13:32:30 +0400 Subject: [PATCH 22/46] 6607170: Focus not set by requestFocus Fixing/refactoring focus auto-transfer mechanism. Reviewed-by: son --- jdk/src/share/classes/java/awt/Component.java | 187 ++++++-------- jdk/src/share/classes/java/awt/Container.java | 23 +- .../java/awt/DefaultKeyboardFocusManager.java | 22 +- .../java/awt/KeyboardFocusManager.java | 4 + .../awt/X11/XKeyboardFocusManagerPeer.java | 6 +- .../native/sun/windows/awt_Component.cpp | 19 ++ .../ContainerFocusAutoTransferTest.java | 243 ++++++++++++++++++ 7 files changed, 385 insertions(+), 119 deletions(-) create mode 100644 jdk/test/java/awt/Focus/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java diff --git a/jdk/src/share/classes/java/awt/Component.java b/jdk/src/share/classes/java/awt/Component.java index 1bbd4dcf45b..22fb95f5aa9 100644 --- a/jdk/src/share/classes/java/awt/Component.java +++ b/jdk/src/share/classes/java/awt/Component.java @@ -1327,12 +1327,15 @@ public abstract class Component implements ImageObserver, MenuContainer, KeyboardFocusManager.clearMostRecentFocusOwner(this); synchronized (getTreeLock()) { enabled = false; - if (isFocusOwner()) { + // A disabled lw container is allowed to contain a focus owner. + if ((isFocusOwner() || (containsFocus() && !isLightweight())) && + KeyboardFocusManager.isAutoFocusTransferEnabled()) + { // Don't clear the global focus owner. If transferFocus // fails, we want the focus to stay on the disabled // Component so that keyboard traversal, et. al. still // makes sense to the user. - autoTransferFocus(false); + transferFocus(false); } ComponentPeer peer = this.peer; if (peer != null) { @@ -1493,8 +1496,8 @@ public abstract class Component implements ImageObserver, MenuContainer, synchronized (getTreeLock()) { visible = false; mixOnHiding(isLightweight()); - if (containsFocus()) { - autoTransferFocus(true); + if (containsFocus() && KeyboardFocusManager.isAutoFocusTransferEnabled()) { + transferFocus(true); } ComponentPeer peer = this.peer; if (peer != null) { @@ -6578,12 +6581,8 @@ public abstract class Component implements ImageObserver, MenuContainer, } synchronized (getTreeLock()) { - if (isFocusOwner() - && KeyboardFocusManager.isAutoFocusTransferEnabled() - && !nextFocusHelper()) - { - KeyboardFocusManager.getCurrentKeyboardFocusManager(). - clearGlobalFocusOwner(); + if (isFocusOwner() && KeyboardFocusManager.isAutoFocusTransferEnabledFor(this)) { + transferFocus(true); } if (getContainer() != null && isAddNotifyComplete) { @@ -6718,8 +6717,8 @@ public abstract class Component implements ImageObserver, MenuContainer, firePropertyChange("focusable", oldFocusable, focusable); if (oldFocusable && !focusable) { - if (isFocusOwner()) { - autoTransferFocus(true); + if (isFocusOwner() && KeyboardFocusManager.isAutoFocusTransferEnabled()) { + transferFocus(true); } KeyboardFocusManager.clearMostRecentFocusOwner(this); } @@ -7373,69 +7372,6 @@ public abstract class Component implements ImageObserver, MenuContainer, } } - private void autoTransferFocus(boolean clearOnFailure) { - Component toTest = KeyboardFocusManager. - getCurrentKeyboardFocusManager().getFocusOwner(); - if (toTest != this) { - if (toTest != null) { - toTest.autoTransferFocus(clearOnFailure); - } - return; - } - - // Check if there are pending focus requests. We shouldn't do - // auto-transfer if user has already took care of this - // component becoming ineligible to hold focus. - if (!KeyboardFocusManager.isAutoFocusTransferEnabled()) { - return; - } - - // the following code will execute only if this Component is the focus - // owner - - if (!(isDisplayable() && isVisible() && isEnabled() && isFocusable())) { - doAutoTransfer(clearOnFailure); - return; - } - - toTest = getParent(); - - while (toTest != null && !(toTest instanceof Window)) { - if (!(toTest.isDisplayable() && toTest.isVisible() && - (toTest.isEnabled() || toTest.isLightweight()))) { - doAutoTransfer(clearOnFailure); - return; - } - toTest = toTest.getParent(); - } - } - private void doAutoTransfer(boolean clearOnFailure) { - if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "this = " + this + ", clearOnFailure = " + clearOnFailure); - } - if (clearOnFailure) { - if (!nextFocusHelper()) { - if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "clear global focus owner"); - } - KeyboardFocusManager.getCurrentKeyboardFocusManager(). - clearGlobalFocusOwner(); - } - } else { - transferFocus(); - } - } - - /** - * Transfers the focus to the next component, as though this Component were - * the focus owner. - * @see #requestFocus() - * @since JDK1.1 - */ - public void transferFocus() { - nextFocus(); - } - /** * Returns the Container which is the focus cycle root of this Component's * focus traversal cycle. Each focus traversal cycle has only a single @@ -7475,31 +7411,51 @@ public abstract class Component implements ImageObserver, MenuContainer, return (rootAncestor == container); } + Container getTraversalRoot() { + return getFocusCycleRootAncestor(); + } + + /** + * Transfers the focus to the next component, as though this Component were + * the focus owner. + * @see #requestFocus() + * @since JDK1.1 + */ + public void transferFocus() { + nextFocus(); + } + /** * @deprecated As of JDK version 1.1, * replaced by transferFocus(). */ @Deprecated public void nextFocus() { - nextFocusHelper(); + transferFocus(false); } - private boolean nextFocusHelper() { - Component toFocus = preNextFocusHelper(); + boolean transferFocus(boolean clearOnFailure) { if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "toFocus = " + toFocus); + focusLog.finer("clearOnFailure = " + clearOnFailure); } - if (isFocusOwner() && toFocus == this) { - return false; + Component toFocus = getNextFocusCandidate(); + boolean res = false; + if (toFocus != null && !toFocus.isFocusOwner() && toFocus != this) { + res = toFocus.requestFocusInWindow(CausedFocusEvent.Cause.TRAVERSAL_FORWARD); } - return postNextFocusHelper(toFocus, CausedFocusEvent.Cause.TRAVERSAL_FORWARD); + if (clearOnFailure && !res) { + if (focusLog.isLoggable(Level.FINER)) { + focusLog.finer("clear global focus owner"); + } + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + } + if (focusLog.isLoggable(Level.FINER)) { + focusLog.finer("returning result: " + res); + } + return res; } - Container getTraversalRoot() { - return getFocusCycleRootAncestor(); - } - - final Component preNextFocusHelper() { + final Component getNextFocusCandidate() { Container rootAncestor = getTraversalRoot(); Component comp = this; while (rootAncestor != null && @@ -7511,18 +7467,19 @@ public abstract class Component implements ImageObserver, MenuContainer, rootAncestor = comp.getFocusCycleRootAncestor(); } if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "comp = " + comp + ", root = " + rootAncestor); + focusLog.finer("comp = " + comp + ", root = " + rootAncestor); } + Component candidate = null; if (rootAncestor != null) { FocusTraversalPolicy policy = rootAncestor.getFocusTraversalPolicy(); Component toFocus = policy.getComponentAfter(rootAncestor, comp); if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "component after is " + toFocus); + focusLog.finer("component after is " + toFocus); } if (toFocus == null) { toFocus = policy.getDefaultComponent(rootAncestor); if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "default component is " + toFocus); + focusLog.finer("default component is " + toFocus); } } if (toFocus == null) { @@ -7531,23 +7488,12 @@ public abstract class Component implements ImageObserver, MenuContainer, toFocus = applet; } } - return toFocus; + candidate = toFocus; } - return null; - } - - static boolean postNextFocusHelper(Component toFocus, CausedFocusEvent.Cause cause) { - if (toFocus != null) { - if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "Next component " + toFocus); - } - boolean res = toFocus.requestFocusInWindow(cause); - if (focusLog.isLoggable(Level.FINER)) { - focusLog.log(Level.FINER, "Request focus returned " + res); - } - return res; + if (focusLog.isLoggable(Level.FINER)) { + focusLog.finer("Focus transfer candidate: " + candidate); } - return false; + return candidate; } /** @@ -7557,6 +7503,10 @@ public abstract class Component implements ImageObserver, MenuContainer, * @since 1.4 */ public void transferFocusBackward() { + transferFocusBackward(false); + } + + boolean transferFocusBackward(boolean clearOnFailure) { Container rootAncestor = getTraversalRoot(); Component comp = this; while (rootAncestor != null && @@ -7567,6 +7517,7 @@ public abstract class Component implements ImageObserver, MenuContainer, comp = rootAncestor; rootAncestor = comp.getFocusCycleRootAncestor(); } + boolean res = false; if (rootAncestor != null) { FocusTraversalPolicy policy = rootAncestor.getFocusTraversalPolicy(); Component toFocus = policy.getComponentBefore(rootAncestor, comp); @@ -7574,9 +7525,19 @@ public abstract class Component implements ImageObserver, MenuContainer, toFocus = policy.getDefaultComponent(rootAncestor); } if (toFocus != null) { - toFocus.requestFocusInWindow(CausedFocusEvent.Cause.TRAVERSAL_BACKWARD); + res = toFocus.requestFocusInWindow(CausedFocusEvent.Cause.TRAVERSAL_BACKWARD); } } + if (!res) { + if (focusLog.isLoggable(Level.FINER)) { + focusLog.finer("clear global focus owner"); + } + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + } + if (focusLog.isLoggable(Level.FINER)) { + focusLog.finer("returning result: " + res); + } + return res; } /** @@ -7651,6 +7612,20 @@ public abstract class Component implements ImageObserver, MenuContainer, return hasFocus(); } + /* + * Used to disallow auto-focus-transfer on disposal of the focus owner + * in the process of disposing its parent container. + */ + private boolean autoFocusTransferOnDisposal = true; + + void setAutoFocusTransferOnDisposal(boolean value) { + autoFocusTransferOnDisposal = value; + } + + boolean isAutoFocusTransferOnDisposal() { + return autoFocusTransferOnDisposal; + } + /** * Adds the specified popup menu to the component. * @param popup the popup menu to be added to the component. diff --git a/jdk/src/share/classes/java/awt/Container.java b/jdk/src/share/classes/java/awt/Container.java index 7eba36a1168..d79bde285f3 100644 --- a/jdk/src/share/classes/java/awt/Container.java +++ b/jdk/src/share/classes/java/awt/Container.java @@ -2660,9 +2660,26 @@ public class Container extends Component { synchronized (getTreeLock()) { int ncomponents = this.ncomponents; Component component[] = this.component; - for (int i = ncomponents-1 ; i >= 0 ; i--) { - if( component[i] != null ) - component[i].removeNotify(); + for (int i = ncomponents - 1; i >= 0; i--) { + if( component[i] != null ) { + // Fix for 6607170. + // We want to suppress focus change on disposal + // of the focused component. But because of focus + // is asynchronous, we should suppress focus change + // on every component in case it receives native focus + // in the process of disposal. + component[i].setAutoFocusTransferOnDisposal(false); + component[i].removeNotify(); + component[i].setAutoFocusTransferOnDisposal(true); + } + } + // If some of the children had focus before disposal then it still has. + // Auto-transfer focus to the next (or previous) component if auto-transfer + // is enabled. + if (containsFocus() && KeyboardFocusManager.isAutoFocusTransferEnabledFor(this)) { + if (!transferFocus(false)) { + transferFocusBackward(true); + } } if ( dispatcher != null ) { dispatcher.dispose(); diff --git a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java index 9e2c6e5620d..928379ec286 100644 --- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -155,12 +155,13 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { boolean clearOnFailure) { if (toFocus != vetoedComponent && toFocus.isShowing() && toFocus.isFocusable() && - toFocus.requestFocus(false, CausedFocusEvent.Cause.ROLLBACK)) { + toFocus.requestFocus(false, CausedFocusEvent.Cause.ROLLBACK)) + { return true; } else { - Component nextFocus = toFocus.preNextFocusHelper(); - if (nextFocus != vetoedComponent - && Component.postNextFocusHelper(nextFocus, CausedFocusEvent.Cause.ROLLBACK)) + Component nextFocus = toFocus.getNextFocusCandidate(); + if (nextFocus != null && nextFocus != vetoedComponent && + nextFocus.requestFocusInWindow(CausedFocusEvent.Cause.ROLLBACK)) { return true; } else if (clearOnFailure) { @@ -504,9 +505,16 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { { // we should not accept focus on such component, so reject it. dequeueKeyEvents(-1, newFocusOwner); - if (KeyboardFocusManager.isAutoFocusTransferEnabled()) - { - restoreFocus(fe, newFocusedWindow); + if (KeyboardFocusManager.isAutoFocusTransferEnabled()) { + // If FOCUS_GAINED is for a disposed component (however + // it shouldn't happen) its toplevel parent is null. In this + // case we have to try to restore focus in the current focused + // window (for the details: 6607170). + if (newFocusedWindow == null) { + restoreFocus(fe, currentFocusedWindow); + } else { + restoreFocus(fe, newFocusedWindow); + } } break; } diff --git a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java index ae14e8311e8..d4a9e34f57d 100644 --- a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java +++ b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java @@ -2578,6 +2578,10 @@ public abstract class KeyboardFocusManager } } + static boolean isAutoFocusTransferEnabledFor(Component comp) { + return isAutoFocusTransferEnabled() && comp.isAutoFocusTransferOnDisposal(); + } + /* * Used to process exceptions in dispatching focus event (in focusLost/focusGained callbacks). * @param ex previously caught exception that may be processed right here, or null diff --git a/jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java index ef5f81ce1cf..a0be3b5ad1d 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java @@ -96,12 +96,12 @@ public class XKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer { Component focusOwner = activeWindow.getFocusOwner(); if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner); if (focusOwner != null) { - XComponentPeer nativePeer = XComponentPeer.getNativeContainer(focusOwner); - if (nativePeer != null) { +// XComponentPeer nativePeer = XComponentPeer.getNativeContainer(focusOwner); +// if (nativePeer != null) { FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null, CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER); XWindow.sendEvent(fl); - } +// } } } } diff --git a/jdk/src/windows/native/sun/windows/awt_Component.cpp b/jdk/src/windows/native/sun/windows/awt_Component.cpp index f2f59b859cc..5dc8ff6fe9d 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp @@ -903,8 +903,27 @@ void AwtComponent::Show() void AwtComponent::Hide() { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject peer = GetPeer(env); + BOOL oldValue = sm_suppressFocusAndActivation; m_visible = false; + + // On disposal the focus owner actually loses focus at the moment of hiding. + // So, focus change suppression (if requested) should be made here. + if (GetHWnd() == sm_focusOwner && + !JNU_CallMethodByName(env, NULL, peer, "isAutoFocusTransferOnDisposal", "()Z").z) + { + sm_suppressFocusAndActivation = TRUE; + // The native system may autotransfer focus on hiding to the parent + // of the component. Nevertheless this focus change won't be posted + // to the Java level, we're better to avoid this. Anyway, after + // the disposal focus should be requested to the right component. + ::SetFocus(NULL); + sm_focusOwner = NULL; + } ::ShowWindow(GetHWnd(), SW_HIDE); + + sm_suppressFocusAndActivation = oldValue; } BOOL diff --git a/jdk/test/java/awt/Focus/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java b/jdk/test/java/awt/Focus/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java new file mode 100644 index 00000000000..7671bace2a5 --- /dev/null +++ b/jdk/test/java/awt/Focus/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java @@ -0,0 +1,243 @@ +/* + * 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 6607170 + @summary Tests for focus-auto-transfer. + @author Anton Tarasov: area=awt-focus + @library ../../regtesthelpers + @build Util + @run main ContainerFocusAutoTransferTest +*/ + +import java.applet.Applet; +import java.awt.AWTEvent; +import java.awt.Component; +import java.awt.ComponentOrientation; +import java.awt.DefaultKeyboardFocusManager; +import java.awt.KeyboardFocusManager; +import java.awt.Robot; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.Toolkit; +import java.awt.event.AWTEventListener; +import java.awt.event.FocusEvent; +import java.awt.event.WindowEvent; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import test.java.awt.regtesthelpers.Util; + +public class ContainerFocusAutoTransferTest extends Applet { + Robot robot; + TestFrame frame; + KeyboardFocusManager kfm; + enum TestCase { + REMOVAL { public String toString() { return "removal"; } }, + HIDING { public String toString() { return "hiding"; } }, + DISABLING { public String toString() { return "disabling"; } }, + DEFOCUSING { public String toString() { return "defocusing"; } }; + public abstract String toString(); + }; + + public static void main(String[] args) { + ContainerFocusAutoTransferTest app = new ContainerFocusAutoTransferTest(); + app.init(); + app.start(); + } + + public void init() { + robot = Util.createRobot(); + kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { + public void eventDispatched(AWTEvent event) { + System.out.println("--> " + event); + } + }, FocusEvent.FOCUS_EVENT_MASK | WindowEvent.WINDOW_FOCUS_EVENT_MASK); + } + + public void start() { + System.out.println("*** TEST #1 ***"); + test(TestCase.HIDING); + + System.out.println("*** TEST #2 ***"); + test(TestCase.REMOVAL); + + System.out.println("*** TEST #3 ***"); + test3(TestCase.DISABLING); + + System.out.println("*** TEST #4 ***"); + test3(TestCase.DEFOCUSING); + + System.out.println("*** TEST #5 ***"); + test4(); + + System.out.println("Test passed."); + } + + void test(final TestCase t) { + showFrame(); + test1(t); // Test for correct auto-transfer + test2(t); // Test for clearing focus + } + + void test1(final TestCase t) { + Runnable action = new Runnable() { + public void run() { + KeyboardFocusManager.setCurrentKeyboardFocusManager(new TestKFM()); + if (t == TestCase.REMOVAL) { + frame.remove(frame.panel0); + + } else if (t == TestCase.HIDING) { + frame.panel0.setVisible(false); + } + frame.repaint(); + } + }; + if (!Util.trackFocusGained(frame.b3, action, 2000, false)) { + throw new TestFailedException(t + ": focus wasn't transfered as expected!"); + } + KeyboardFocusManager.setCurrentKeyboardFocusManager(kfm); + } + + void test2(TestCase t) { + frame.setFocusable(false); // exclude it from the focus cycle + if (t == TestCase.REMOVAL) { + frame.remove(frame.panel1); + + } else if (t == TestCase.HIDING) { + frame.panel1.setVisible(false); + } + frame.repaint(); + Util.waitForIdle(robot); + if (kfm.getFocusOwner() != null) { + throw new TestFailedException(t + ": focus wasn't cleared!"); + } + } + + void test3(final TestCase t) { + showFrame(); + Runnable action = new Runnable() { + public void run() { + if (t == TestCase.DISABLING) { + frame.b0.setEnabled(false); + + } else if (t == TestCase.DEFOCUSING) { + frame.b0.setFocusable(false); + } + }}; + if (!Util.trackFocusGained(frame.b1, action, 2000, false)) { + throw new TestFailedException(t + ": focus wasn't transfered as expected!"); + } + } + + void test4() { + showFrame(); + frame.setFocusableWindowState(false); + Util.waitForIdle(robot); + if (kfm.getFocusOwner() != null) { + throw new TestFailedException("defocusing the frame: focus wasn't cleared!"); + } + } + + void showFrame() { + if (frame != null) { + frame.dispose(); + Util.waitForIdle(robot); + } + frame = new TestFrame(); + frame.setVisible(true); + Util.waitTillShown(frame); + + if (!frame.b0.hasFocus()) { + Util.clickOnComp(frame.b0, robot); + Util.waitForIdle(robot); + if (!frame.b0.hasFocus()) { + throw new TestErrorException("couldn't set focus on " + frame.b2); + } + } + } + + class TestKFM extends DefaultKeyboardFocusManager { + public boolean dispatchEvent(AWTEvent e) { + if (e.getID() == FocusEvent.FOCUS_GAINED) { + System.out.println(e); + Component src = (Component)e.getSource(); + if (src == frame.b1 || src == frame.b2) { + throw new TestFailedException("wrong focus transfer on removal!"); + } + } + return super.dispatchEvent(e); + } + } +} + +class TestFrame extends JFrame { + public JPanel panel0 = new JPanel(); + public JPanel panel1 = new JPanel(); + public JButton b0 = new JButton("b0"); + public JButton b1 = new JButton("b1"); + public JButton b2 = new JButton("b2"); + public JButton b3 = new JButton("b3"); + public JButton b4 = new JButton("b4"); + + public TestFrame() { + super("TestFrame"); + + // The change of the orientation and the reverse order of + // adding the buttons to the panel is because in Container.removeNotify() + // the child components are removed in the reverse order. + // We want that the focus owner (b0) would be removed first and + // that the next traversable component would be b1. + panel0.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + panel0.add(b2); + panel0.add(b1); + panel0.add(b0); + + panel1.add(b3); + panel1.add(b4); + + setLayout(new FlowLayout()); + add(panel0); + add(panel1); + pack(); + + panel0.setBackground(Color.red); + panel1.setBackground(Color.blue); + } +} + +// Thrown when the behavior being verified is found wrong. +class TestFailedException extends RuntimeException { + TestFailedException(String msg) { + super("Test failed: " + msg); + } +} + +// Thrown when an error not related to the behavior being verified is encountered. +class TestErrorException extends RuntimeException { + TestErrorException(String msg) { + super("Unexpected error: " + msg); + } +} From e1d1e39f49433d5a02f9045088e41be8ea3b129c Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Wed, 9 Apr 2008 09:37:07 +0400 Subject: [PATCH 23/46] 6522725: Component in a minimized Frame has focus and receives key events XAWT: a window natively focused may request focus in it only synthetically Reviewed-by: son --- .../classes/sun/awt/X11/XComponentPeer.java | 54 ++++---- .../classes/sun/awt/X11/XDecoratedPeer.java | 76 +++++------ .../classes/sun/awt/X11/XWindowPeer.java | 45 ++++--- .../IconifiedFrameFocusChangeTest.java | 124 ++++++++++++++++++ 4 files changed, 213 insertions(+), 86 deletions(-) create mode 100644 jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java diff --git a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java index 8e9c930889f..55b14ab65c6 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java @@ -420,40 +420,36 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget case SNFH_SUCCESS_PROCEED: // Currently we just generate focus events like we deal with lightweight instead of calling // XSetInputFocus on native window - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Proceeding with request to " + lightweightChild + " in " + target); + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Proceeding with request to " + + lightweightChild + " in " + target); /** * The problems with requests in non-focused window arise because shouldNativelyFocusHeavyweight * checks that native window is focused while appropriate WINDOW_GAINED_FOCUS has not yet * been processed - it is in EventQueue. Thus, SNFH allows native request and stores request record - * in requests list - and it breaks our requests sequence as first record on WGF should be the last focus - * owner which had focus before WLF. So, we should not add request record for such requests + * in requests list - and it breaks our requests sequence as first record on WGF should be the last + * focus owner which had focus before WLF. So, we should not add request record for such requests * but store this component in mostRecent - and return true as before for compatibility. */ Window parentWindow = getContainingWindow(target); - if (parentWindow != null) { - // and check that it is focused - if (!parentWindow.isFocused()) { - XWindowPeer wpeer = (XWindowPeer)parentWindow.getPeer(); - /* - * Fix for 6314575. - * Shouldn't restore focus on 'actualFocusedWindow' - * when a component inside a Frame is requesting it. - */ - wpeer.setActualFocusedWindow(null); + if (parentWindow == null) { + return rejectFocusRequestHelper("WARNING: Parent window is null"); + } + XWindowPeer wpeer = (XWindowPeer)parentWindow.getPeer(); + if (wpeer == null) { + return rejectFocusRequestHelper("WARNING: Parent window's peer is null"); + } + /* + * Passing null 'actualFocusedWindow' as we don't want to restore focus on it + * when a component inside a Frame is requesting focus. + * See 6314575 for details. + */ + boolean res = wpeer.requestWindowFocus(null); - boolean res = wpeer.requestWindowFocus(); - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Requested window focus: " + res); - // If parent window can be made focused and has been made focused(synchronously) - // then we can proceed with children, otherwise we retreat. - if (!(res && parentWindow.isFocused())) { - focusLog.finer("Waiting for asynchronous processing of window focus request"); - KeyboardFocusManagerPeerImpl.removeLastFocusRequest(target); - return false; - } - } - } else { - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("WARNING: Parent window is null"); - return false; + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Requested window focus: " + res); + // If parent window can be made focused and has been made focused(synchronously) + // then we can proceed with children, otherwise we retreat. + if (!(res && parentWindow.isFocused())) { + return rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); } // NOTE: We simulate heavyweight behavior of Motif - component receives focus right @@ -469,6 +465,12 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget return false; } + private boolean rejectFocusRequestHelper(String logMsg) { + if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg); + KeyboardFocusManagerPeerImpl.removeLastFocusRequest(target); + return false; + } + void handleJavaFocusEvent(AWTEvent e) { if (focusLog.isLoggable(Level.FINER)) focusLog.finer(e.toString()); if (e.getID() == FocusEvent.FOCUS_GAINED) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java index aea3baac72b..d2241d13e5c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java @@ -1013,16 +1013,6 @@ abstract class XDecoratedPeer extends XWindowPeer { private void handleWmTakeFocus(XClientMessageEvent cl) { focusLog.log(Level.FINE, "WM_TAKE_FOCUS on {0}", new Object[]{this}); - // A workaround to Metacity issue (see 6613426). - // The first check is to skip redundant WM_TAKE_FOCUS on click - // in a focused frame. The second check is to allow requesting focus - // on click in a frame when its owned window is currently focused. - if (this == getNativeFocusedWindowPeer() && - target == XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow()) - { - focusLog.fine("The window is already focused, skipping."); - return; - } requestWindowFocus(cl.get_data(1), true); } @@ -1124,53 +1114,51 @@ abstract class XDecoratedPeer extends XWindowPeer { focusLog.fine("Request for decorated window focus"); // If this is Frame or Dialog we can't assure focus request success - but we still can try // If this is Window and its owner Frame is active we can be sure request succedded. - Window win = (Window)target; Window focusedWindow = XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow(); Window activeWindow = XWindowPeer.getDecoratedOwner(focusedWindow); focusLog.log(Level.FINER, "Current window is: active={0}, focused={1}", - new Object[]{ Boolean.valueOf(win == activeWindow), - Boolean.valueOf(win == focusedWindow)}); + new Object[]{ Boolean.valueOf(target == activeWindow), + Boolean.valueOf(target == focusedWindow)}); XWindowPeer toFocus = this; while (toFocus.nextTransientFor != null) { toFocus = toFocus.nextTransientFor; } - - if (this == toFocus) { - if (focusAllowedFor()) { - if (win == activeWindow && win != focusedWindow) { - // Happens when focus is on window child - focusLog.fine("Focus is on child window - transfering it back"); - handleWindowFocusInSync(-1); - } else { - focusLog.fine("Requesting focus to this window"); - if (timeProvided) { - requestXFocus(time); - } else { - requestXFocus(); - } - } - return true; - } else { - return false; - } - } - else if (toFocus.focusAllowedFor()) { - focusLog.fine("Requesting focus to " + toFocus); - if (timeProvided) { - toFocus.requestXFocus(time); - } else { - toFocus.requestXFocus(); - } - return false; - } - else - { + if (toFocus == null || !toFocus.focusAllowedFor()) { // This might change when WM will have property to determine focus policy. // Right now, because policy is unknown we can't be sure we succedded return false; } + if (this == toFocus) { + if (isWMStateNetHidden()) { + focusLog.fine("The window is unmapped, so rejecting the request"); + return false; + } + if (target == activeWindow && target != focusedWindow) { + // Happens when an owned window is currently focused + focusLog.fine("Focus is on child window - transfering it back to the owner"); + handleWindowFocusInSync(-1); + return true; + } + Window realNativeFocusedWindow = XWindowPeer.getNativeFocusedWindow(); + focusLog.finest("Real native focused window: " + realNativeFocusedWindow + + "\nKFM's focused window: " + focusedWindow); + + // See 6522725, 6613426. + if (target == realNativeFocusedWindow) { + focusLog.fine("The window is already natively focused."); + return true; + } + } + focusLog.fine("Requesting focus to " + (this == toFocus ? "this window" : toFocus)); + + if (timeProvided) { + toFocus.requestXFocus(time); + } else { + toFocus.requestXFocus(); + } + return (this == toFocus); } XWindowPeer actualFocusedWindow = null; diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java index 2222163b4ab..fe8fd7c6fc7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java @@ -582,7 +582,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, } /* - * Converts native focused X window id into Java peer. + * Retrives real native focused window and converts it into Java peer. */ static XWindowPeer getNativeFocusedWindowPeer() { XBaseWindow baseWindow = XToolkit.windowToXWindow(xGetInputFocus()); @@ -591,6 +591,14 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, ((XFocusProxyWindow)baseWindow).getOwner() : null; } + /* + * Retrives real native focused window and converts it into Java window. + */ + static Window getNativeFocusedWindow() { + XWindowPeer peer = getNativeFocusedWindowPeer(); + return peer != null ? (Window)peer.target : null; + } + boolean isFocusableWindow() { if (XToolkit.isToolkitThread() || SunToolkit.isAWTLockHeldByCurrentThread()) { @@ -1252,7 +1260,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, return res; } - private boolean isWMStateNetHidden() { + protected boolean isWMStateNetHidden() { XNETProtocol protocol = XWM.getWM().getNETProtocol(); return (protocol != null && protocol.isWMStateNetHidden(this)); } @@ -1740,6 +1748,11 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, return window; } + public boolean requestWindowFocus(XWindowPeer actualFocusedWindow) { + setActualFocusedWindow(actualFocusedWindow); + return requestWindowFocus(); + } + public boolean requestWindowFocus() { return requestWindowFocus(0, false); } @@ -1748,25 +1761,25 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, focusLog.fine("Request for window focus"); // If this is Frame or Dialog we can't assure focus request success - but we still can try // If this is Window and its owner Frame is active we can be sure request succedded. - Window win = (Window) target; - Window owner = XWindowPeer.getDecoratedOwner(win); + Window ownerWindow = XWindowPeer.getDecoratedOwner((Window)target); + Window focusedWindow = XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow(); + Window activeWindow = XWindowPeer.getDecoratedOwner(focusedWindow); - final Window activeWindow = - XWindowPeer.getDecoratedOwner(XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow()); - if (activeWindow == owner) { + if (isWMStateNetHidden()) { + focusLog.fine("The window is unmapped, so rejecting the request"); + return false; + } + if (activeWindow == ownerWindow) { focusLog.fine("Parent window is active - generating focus for this window"); handleWindowFocusInSync(-1); return true; - } else { - focusLog.fine("Parent window is not active"); } - ComponentPeer peer = ComponentAccessor.getPeer(owner); - if (peer instanceof XDecoratedPeer) { - XDecoratedPeer wpeer = (XDecoratedPeer) peer; - if (wpeer.requestWindowFocus(this, time, timeProvided)) { - focusLog.fine("Parent window accepted focus request - generating focus for this window"); - return true; - } + focusLog.fine("Parent window is not active"); + + XDecoratedPeer wpeer = (XDecoratedPeer)ComponentAccessor.getPeer(ownerWindow); + if (wpeer != null && wpeer.requestWindowFocus(this, time, timeProvided)) { + focusLog.fine("Parent window accepted focus request - generating focus for this window"); + return true; } focusLog.fine("Denied - parent window is not active and didn't accept focus request"); return false; diff --git a/jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java b/jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java new file mode 100644 index 00000000000..409ce351f34 --- /dev/null +++ b/jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java @@ -0,0 +1,124 @@ +/* + * 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 6522725 + @summary Tests for proper request-focus-back on FOCUS_LOST. + @author Anton Tarasov: area=awt-focus + @library ../../regtesthelpers + @build Util + @run main IconifiedFrameFocusChangeTest +*/ + +import java.awt.*; +import java.applet.Applet; +import java.awt.event.*; +import test.java.awt.regtesthelpers.Util; + +public class IconifiedFrameFocusChangeTest extends Applet { + Frame testFrame = new Frame("Test Frame"); + Frame otherFrame = new Frame("Other Frame"); + Button testButton = new Button("test button"); + Button otherButton = new Button("other button"); + Robot robot; + + public static void main(String[] args) { + IconifiedFrameFocusChangeTest app = new IconifiedFrameFocusChangeTest(); + app.init(); + app.start(); + } + + public void init() { + robot = Util.createRobot(); + + testFrame.add(testButton); + testFrame.pack(); + otherFrame.add(otherButton); + otherFrame.pack(); + otherFrame.setLocation(200, 0); + + testButton.addFocusListener(new FocusAdapter() { + public void focusLost(FocusEvent e) { + testButton.requestFocus(); + } + }); + } + + public void start() { + otherFrame.setVisible(true); + Util.waitForIdle(robot); + testFrame.setVisible(true); + Util.waitForIdle(robot); + + if (!testButton.hasFocus()) { + throw new TestErrorException("wrong initial focus"); + } + + /* + * Iconify the Frame. Test that focus switches properly. + */ + Runnable action = new Runnable() { + public void run() { + testFrame.setExtendedState(Frame.ICONIFIED); + } + }; + if (!Util.trackFocusGained(otherButton, action, 2000, true)) { + throw new TestFailedException("iconifying focused window didn't trigger focus change"); + } + + /* + * Test that key events go into the focus owner. + */ + action = new Runnable() { + public void run() { + robot.keyPress(KeyEvent.VK_SPACE); + robot.delay(50); + robot.keyRelease(KeyEvent.VK_SPACE); + } + }; + if (!Util.trackActionPerformed(otherButton, action, 2000, true)) { + throw new TestFailedException("Java focus owner doesn't match to the native one"); + } + + System.out.println("Test passed."); + } +} + +/** + * Thrown when the behavior being verified is found wrong. + */ +class TestFailedException extends RuntimeException { + TestFailedException(String msg) { + super("Test failed: " + msg); + } +} + +/** + * Thrown when an error not related to the behavior being verified is encountered. + */ +class TestErrorException extends RuntimeException { + TestErrorException(String msg) { + super("Unexpected error: " + msg); + } +} From 0d3612f2d84cad59010077c083ea426e4fe9fcd5 Mon Sep 17 00:00:00 2001 From: Kirill Kirichenko Date: Fri, 11 Apr 2008 16:25:17 +0400 Subject: [PATCH 24/46] 6624717: Corrupted combo box, GTK L&F, Ubuntu 7.10 Reviewed-by: peterz --- .../solaris/native/sun/awt/gtk2_interface.c | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/jdk/src/solaris/native/sun/awt/gtk2_interface.c b/jdk/src/solaris/native/sun/awt/gtk2_interface.c index a3233b97b0d..919a2b98a1b 100644 --- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c +++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c @@ -333,6 +333,7 @@ static void (*fp_gtk_widget_destroy)(GtkWidget *widget); static GdkPixbuf* (*fp_gtk_widget_render_icon)(GtkWidget *widget, const gchar *stock_id, GtkIconSize size, const gchar *detail); static void (*fp_gtk_widget_set_name)(GtkWidget *widget, const gchar *name); +static void (*fp_gtk_widget_set_parent)(GtkWidget *widget, GtkWidget *parent); static void (*fp_gtk_widget_set_direction)(GtkWidget *widget, GtkTextDirection direction); static void (*fp_gtk_widget_style_get)(GtkWidget *widget, @@ -570,6 +571,8 @@ gboolean gtk2_load() dl_symbol("gtk_widget_render_icon"); fp_gtk_widget_set_name = dl_symbol("gtk_widget_set_name"); + fp_gtk_widget_set_parent = + dl_symbol("gtk_widget_set_parent"); fp_gtk_widget_set_direction = dl_symbol("gtk_widget_set_direction"); fp_gtk_widget_style_get = @@ -1040,7 +1043,7 @@ static GtkWidget *gtk2_get_widget(WidgetType widget_type) (NULL == gtk2_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE])) { gtk2_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE] = - (*fp_gtk_button_new)(); + (*fp_gtk_toggle_button_new)(); } result = gtk2_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE]; break; @@ -1414,12 +1417,20 @@ static GtkWidget *gtk2_get_widget(WidgetType widget_type) widget_type == COMBO_BOX_TEXT_FIELD) { /* - * We add a regular GtkButton/GtkEntry to a GtkComboBoxEntry - * in order to trick engines into thinking it's a real combobox - * arrow button/text field. - */ + * We add a regular GtkButton/GtkEntry to a GtkComboBoxEntry + * in order to trick engines into thinking it's a real combobox + * arrow button/text field. + */ GtkWidget *combo = (*fp_gtk_combo_box_entry_new)(); - (*fp_gtk_container_add)((GtkContainer *)combo, result); + + if (widget_type == COMBO_BOX_TEXT_FIELD) + (*fp_gtk_container_add)((GtkContainer *)combo, result); + else + { + (*fp_gtk_widget_set_parent)(result, combo); + ((GtkBin*)combo)->child = result; + } + (*fp_gtk_container_add)((GtkContainer *)gtk2_fixed, combo); (*fp_gtk_widget_realize)(result); return result; From 74ae1c6b6548adc0b6c6fce65546904530a0dac1 Mon Sep 17 00:00:00 2001 From: Konstantin Voloshin Date: Sun, 13 Apr 2008 23:41:40 +0400 Subject: [PATCH 25/46] 6686273: Some AWT reg. tests should be moved to open repository (for CRs 6444769, 6480547, and 6560348) Some AWT reg. tests are moved to open repository (for CRs 6444769, 6480547, and 6560348) Reviewed-by: ant --- .../WindowWithWarningTest.html | 20 ++ .../WindowWithWarningTest.java | 315 ++++++++++++++++++ .../ScrollSelectionTest.html | 20 ++ .../ScrollSelectionTest.java | 213 ++++++++++++ .../java/awt/xembed/server/JavaClient.java | 126 +++++++ .../java/awt/xembed/server/RunTestXEmbed.java | 176 ++++++++++ .../awt/xembed/server/TestXEmbedServer.java | 228 +++++++++++++ .../xembed/server/TestXEmbedServerJava.java | 86 +++++ .../java/awt/xembed/server/TesterClient.java | 59 ++++ 9 files changed, 1243 insertions(+) create mode 100644 jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html create mode 100644 jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java create mode 100644 jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html create mode 100644 jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java create mode 100644 jdk/test/java/awt/xembed/server/JavaClient.java create mode 100644 jdk/test/java/awt/xembed/server/RunTestXEmbed.java create mode 100644 jdk/test/java/awt/xembed/server/TestXEmbedServer.java create mode 100644 jdk/test/java/awt/xembed/server/TestXEmbedServerJava.java create mode 100644 jdk/test/java/awt/xembed/server/TesterClient.java diff --git a/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html b/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html new file mode 100644 index 00000000000..ad6fa609d4f --- /dev/null +++ b/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html @@ -0,0 +1,20 @@ + + + + + WindowWithWarningTest + +

    +  This test will run automatically.
    +  
    + + + + + diff --git a/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java b/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java new file mode 100644 index 00000000000..fc1cea70a12 --- /dev/null +++ b/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java @@ -0,0 +1,315 @@ +/* + * Copyright 2006-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 6391770 + @summary Content of the Window should be laid out in the area left after WarningWindow was added. + @author yuri nesterenko: area= + @run applet WindowWithWarningTest.html +*/ + +// Note there is no @ in front of test above. This is so that the +// harness will not mistake this file as a test file. It should +// only see the html file as a test file. (the harness runs all +// valid test files, so it would run this test twice if this file +// were valid as well as the html file.) +// Also, note the area= after Your Name in the author tag. Here, you +// should put which functional area the test falls in. See the +// AWT-core home page -> test areas and/or -> AWT team for a list of +// areas. +// Note also the 'AutomaticAppletTest.html' in the run tag. This should +// be changed to the name of the test. + + +/** + * WindowWithWarningTest.java + * + * summary: + */ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +//Automated tests should run as applet tests if possible because they +// get their environments cleaned up, including AWT threads, any +// test created threads, and any system resources used by the test +// such as file descriptors. (This is normally not a problem as +// main tests usually run in a separate VM, however on some platforms +// such as the Mac, separate VMs are not possible and non-applet +// tests will cause problems). Also, you don't have to worry about +// synchronisation stuff in Applet tests they way you do in main +// tests... + + +public class WindowWithWarningTest extends Applet +{ + //Declare things used in the test, like buttons and labels here + boolean buttonClicked = false; + public static final int MAX_COUNT = 100; + + public void init() + { + //Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + + this.setLayout (new BorderLayout ()); + + String[] instructions = + { + "This is an AUTOMATIC test", + "simply wait until it is done" + }; + //Sysout.createDialog( ); + //Sysout.printInstructions( instructions ); + + }//End init() + public void start () + { + //Get things going. Request focus, set size, et cetera + System.setSecurityManager( new SecurityManager() { + // deny AWTPermission("showWindowWithoutWarningBanner") + public boolean checkTopLevelWindow(Object window) { + return false; + } + }); + JFrame frame = new JFrame("Window Test"); + frame.setBounds(50, 50, 200, 200); + frame.show(); + + JWindow window = new JWindow( frame ); + JButton jbutton1 = new JButton( "First" ); + jbutton1.addMouseListener( new MouseAdapter() { + public void mousePressed( MouseEvent me ) { + buttonClicked = true; + } + }); + JButton jbutton2 = new JButton( "Second" ); + window.setLocation( 300, 300 ); + + window.add("North", jbutton1); + window.add("South", jbutton2); + + window.pack(); + window.show(); + //wait for frame to show: + getLocation( frame ); + window.toFront(); + + Dimension size0 = window.getSize(); + Dimension size1 = null; + try { + Robot robot = new Robot(); + + robot.delay(500); + window.pack(); + robot.delay(500); + window.pack(); + // size1 must be the same as size0 + size1 = window.getSize(); + robot.delay(500); + Point pt = jbutton1.getLocationOnScreen(); + robot.mouseMove((int) jbutton1.getLocationOnScreen().x + jbutton1.getWidth() / 2, + (int) jbutton1.getLocationOnScreen().y + jbutton1.getHeight() / 2); + robot.delay(500); + robot.mousePress(MouseEvent.BUTTON1_MASK); + robot.delay(100); + robot.mouseRelease(MouseEvent.BUTTON1_MASK); + robot.delay(2000); + }catch(Exception e) { + throw new RuntimeException( "Exception "+e ); + } + if( !size0.equals(size1) ) { + throw new RuntimeException( "Wrong Window size after multiple pack()s"); + } + if( !buttonClicked ) { + throw new RuntimeException( "Button was not clicked"); + } + window.dispose(); + frame.dispose(); + + System.out.println("Test Passed."); + }// start() + public static Point getLocation( Component co ) throws RuntimeException { + Point pt = null; + boolean bFound = false; + int count = 0; + while( !bFound ) { + try { + pt = co.getLocationOnScreen(); + bFound = true; + }catch( Exception ex ) { + bFound = false; + count++; + } + if( !bFound && count > MAX_COUNT ) { + throw new RuntimeException("don't see a component to get location"); + } + } + return pt; + } + + +}// class AutomaticAppletTest + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + show(); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff --git a/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html b/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html new file mode 100644 index 00000000000..0035efacb6a --- /dev/null +++ b/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html @@ -0,0 +1,20 @@ + + + + ScrollSelectionTest + + + +

    ScrollSelectionTest
    4118621:

    + +

    See the dialog box (usually in upper left corner) for instructions

    + + + + diff --git a/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java b/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java new file mode 100644 index 00000000000..235782f4845 --- /dev/null +++ b/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java @@ -0,0 +1,213 @@ +/* + * Copyright 1999-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 4118621 + @summary tests that selected text isn't scrolled when there is enough room. + @author prs: area=TextField + @run applet/manual=yesno ScrollSelectionTest.html +*/ + +/** + * ScrollSelectionTest.java + * + * summary: tests that selected text isn't scrolled when there is enough room. + */ + +import java.applet.Applet; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.TextField; +import java.awt.TextArea; + +public class ScrollSelectionTest extends Applet + { + + Frame frame = new Frame("ScrollSelectionTest frame"); + TextField tf = new TextField(40); + + public void init() + { + tf.setText("abcdefghijklmnopqrstuvwxyz"); + frame.add(tf); + tf.select(0, 20); + + String[] instructions = + { + "INSTRUCTIONS:", + "This is a test for a win32 specific problem", + "If you see all the letters from 'a' to 'z' and", + "letters from 'a' to 't' are selected then test passes" + }; + Sysout.createDialogWithInstructions( instructions ); + + }// init() + + public void start () + { + setSize (300,300); + setVisible(true); + + frame.setVisible(true); + frame.setBounds (400, 0, 300, 300); + + }// start() + + }// class ScrollSelectionTest + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout + { + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.show(); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.show(); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + + }// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog + { + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("South", messageText); + + pack(); + + show(); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + } + + }// TestDialog class diff --git a/jdk/test/java/awt/xembed/server/JavaClient.java b/jdk/test/java/awt/xembed/server/JavaClient.java new file mode 100644 index 00000000000..af625d6eba3 --- /dev/null +++ b/jdk/test/java/awt/xembed/server/JavaClient.java @@ -0,0 +1,126 @@ +/* + * Copyright 2004-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. + */ + +import java.awt.*; +import sun.awt.*; +import java.awt.event.*; +import java.lang.reflect.*; +import java.awt.dnd.*; +import java.awt.datatransfer.*; + +public class JavaClient { + ClientContainer cont; + public static void main(String[] args) { + if (System.getProperty("os.name").toLowerCase().startsWith("win")) { + return; + } + + // Enable testing extensions in XEmbed server + System.setProperty("sun.awt.xembed.testing", "true"); + + boolean xtoolkit = "sun.awt.X11.XToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName()); + final EmbeddedFrame ef = createEmbeddedFrame(xtoolkit, Long.parseLong(args[0])); + ef.setBackground(new Color(100, 100, 200)); + ef.setLayout(new BorderLayout()); + ef.add(new ClientContainer(ef), BorderLayout.CENTER); + ef.pack(); + ef.registerListeners(); + ef.setVisible(true); + } + private static EmbeddedFrame createEmbeddedFrame(boolean xtoolkit, long window) { + try { + Class cl = (xtoolkit?Class.forName("sun.awt.X11.XEmbeddedFrame"):Class.forName("sun.awt.motif.MEmbeddedFrame")); + Constructor cons = cl.getConstructor(new Class[]{Long.TYPE, Boolean.TYPE}); + return (EmbeddedFrame)cons.newInstance(new Object[] {window, true}); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Can't create embedded frame"); + } + } +} + +class ClientContainer extends Container { + Window parent; + int width, height; + public ClientContainer(Window w) { + parent = w; + width = 500; + height = 50; + final TextField tf = new TextField(30); + + DragSource ds = new DragSource(); + final DragSourceListener dsl = new DragSourceAdapter() { + public void dragDropEnd(DragSourceDropEvent dsde) { + } + }; + final DragGestureListener dgl = new DragGestureListener() { + public void dragGestureRecognized(DragGestureEvent dge) { + dge.startDrag(null, new StringSelection(tf.getText()), dsl); + } + }; + ds.createDefaultDragGestureRecognizer(tf, DnDConstants.ACTION_COPY, dgl); + + final DropTargetListener dtl = new DropTargetAdapter() { + public void drop(DropTargetDropEvent dtde) { + dtde.acceptDrop(DnDConstants.ACTION_COPY); + try { + tf.setText(tf.getText() + (String)dtde.getTransferable().getTransferData(DataFlavor.stringFlavor)); + } catch (Exception e) { + } + } + }; + final DropTarget dt = new DropTarget(tf, dtl); + + setLayout(new FlowLayout()); + add(tf); + Button close = new Button("Close"); + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + parent.dispose(); + } + }); + Button inc = new Button("Increase size"); + inc.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + changeSize(10); + } + }); + Button dec = new Button("Decrease size"); + dec.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + changeSize(-10); + } + }); + add(close); + add(inc); + add(dec); + } + void changeSize(int step) { + width += step; + height += step; + parent.pack(); + } + public Dimension getPreferredSize() { + return new Dimension(width, height); + } +} diff --git a/jdk/test/java/awt/xembed/server/RunTestXEmbed.java b/jdk/test/java/awt/xembed/server/RunTestXEmbed.java new file mode 100644 index 00000000000..d4f88cb4e03 --- /dev/null +++ b/jdk/test/java/awt/xembed/server/RunTestXEmbed.java @@ -0,0 +1,176 @@ +/* + * Copyright 2004-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 4931668 + * @summary Tests XEmbed server/client functionality + * @author Denis Mikhalkin: area=awt.xembed + * @compile JavaClient.java TesterClient.java TestXEmbedServer.java + * @run main/timeout=6000 RunTestXEmbed + */ + +import java.awt.Rectangle; +import java.lang.reflect.Method; +import java.util.logging.*; +import java.util.*; +import java.io.*; + +public class RunTestXEmbed extends TestXEmbedServer { + private static final Logger log = Logger.getLogger("test.xembed"); + private Method test; + private boolean passed = false; + public RunTestXEmbed(Method test) { + super(false); + this.test = test; + } + + public Process startClient(Rectangle bounds[], long window) { + try { + String java_home = System.getProperty("java.home"); + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < bounds.length; i++) { + buf.append(" " + bounds[i].x); + buf.append(" " + bounds[i].y); + buf.append(" " + bounds[i].width); + buf.append(" " + bounds[i].height); + } + Map envs = System.getenv(); + String enva[] = new String[envs.size()]; + int ind = 0; + Iterator iter = envs.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + if (!"AWT_TOOLKIT".equals(entry.getKey())) { + enva[ind++] = entry.getKey() + "=" + entry.getValue(); + } else { + enva[ind++] = "AWT_TOOLKIT=sun.awt.X11.XToolkit"; + } + } + Process proc = Runtime.getRuntime().exec(java_home + + "/bin/java -Dawt.toolkit=sun.awt.X11.XToolkit TesterClient " + + test.getName() + " " + window + buf, + enva); + System.err.println("Test for " + test.getName() + " has started."); + log.fine("Test for " + test.getName() + " has started."); + new InputReader(proc.getInputStream()); + new InputReader(proc.getErrorStream()); + try { + passed = (proc.waitFor() == 0); + } catch (InterruptedException ie) { + } + log.fine("Test for " + test.getName() + " has finished."); + File logFile = new File("java3.txt"); + if (logFile.exists()) { + logFile.renameTo(new File(test.getName() + ".txt")); + } + return proc; + } catch (IOException ex1) { + ex1.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Throwable { + if (System.getProperty("os.name").toLowerCase().startsWith("win")) { + return; + } + + // Enabled XEmbed + System.setProperty("sun.awt.xembedserver", "true"); + + if (args.length == 1) { + Class cl = Class.forName("sun.awt.X11.XEmbedServerTester"); + Method meth = cl.getMethod(args[0], new Class[0]); + System.err.println("Performing single test " + args[0]); + boolean res = performTest(meth); + if (!res) { + System.err.println("Test " + args[0] + " has failed"); + } else { + System.err.println("Test " + args[0] + " has passed"); + } + } else { + Class cl = Class.forName("sun.awt.X11.XEmbedServerTester"); + Method[] meths = cl.getMethods(); + LinkedList failed = new LinkedList(); + for (int i = 0; i < meths.length; i++) { + Method meth = meths[i]; + if (meth.getReturnType() == Void.TYPE && meth.getName().startsWith("test") && meth.getParameterTypes().length == 0) { + System.err.println("Performing " + meth.getName()); + boolean res = performTest(meth); + if (!res) { + failed.add(meth); + } + } + } + log.info("Testing finished."); + if (failed.size() != 0) { + System.err.println("Some tests have failed:"); + Iterator iter = failed.iterator(); + while(iter.hasNext()) { + Method meth = (Method)iter.next(); + System.err.println(meth.getName()); + } + throw new RuntimeException("TestFAILED: some of the testcases are failed"); + } else { + System.err.println("All PASSED"); + } + } + } + + private static boolean performTest(Method meth) { + RunTestXEmbed test = new RunTestXEmbed(meth); + test.addClient(); + test.dispose(); + return test.isPassed(); + } + + public boolean isPassed() { + return passed; + } +} + +class InputReader extends Thread { + private InputStream stream; + public InputReader(InputStream stream) { + this.stream = stream; + start(); + } + public void run() { + while (!interrupted()) { + try { + int inp = stream.read(); + if (inp != -1) { + System.out.write(inp); + } else { + try { + Thread.sleep(100); + } catch (Exception iie) { + } + } + } catch (IOException ie) { + break; + } + } + } +} diff --git a/jdk/test/java/awt/xembed/server/TestXEmbedServer.java b/jdk/test/java/awt/xembed/server/TestXEmbedServer.java new file mode 100644 index 00000000000..87d087473a8 --- /dev/null +++ b/jdk/test/java/awt/xembed/server/TestXEmbedServer.java @@ -0,0 +1,228 @@ +/* + * Copyright 2004-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. + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import java.io.*; +import java.util.logging.*; +import sun.awt.WindowIDProvider; +import java.awt.dnd.*; +import java.awt.datatransfer.*; + +public abstract class TestXEmbedServer { + private static final Logger log = Logger.getLogger("test.xembed"); + Frame f; + Canvas client; + Button toFocus; + Button b_modal; + JButton b_close; + JDialog modal_d; + JFrame dummy; + Container clientCont; + boolean passed; + + public boolean isPassed() { + return passed; + } + + public TestXEmbedServer(boolean manual) { + + // Enable testing extensions in XEmbed server + System.setProperty("sun.awt.xembed.testing", "true"); + + f = new Frame("Main frame"); + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + synchronized(TestXEmbedServer.this) { + TestXEmbedServer.this.notifyAll(); + } + dummy.dispose(); + f.dispose(); + } + }); + + f.setLayout(new BorderLayout()); + + Container bcont = new Container(); + + toFocus = new Button("Click to focus server"); + final TextField tf = new TextField(20); + tf.setName("0"); + DragSource ds = new DragSource(); + final DragSourceListener dsl = new DragSourceAdapter() { + public void dragDropEnd(DragSourceDropEvent dsde) { + } + }; + final DragGestureListener dgl = new DragGestureListener() { + public void dragGestureRecognized(DragGestureEvent dge) { + dge.startDrag(null, new StringSelection(tf.getText()), dsl); + } + }; + ds.createDefaultDragGestureRecognizer(tf, DnDConstants.ACTION_COPY, dgl); + + final DropTargetListener dtl = new DropTargetAdapter() { + public void drop(DropTargetDropEvent dtde) { + dtde.acceptDrop(DnDConstants.ACTION_COPY); + try { + tf.setText(tf.getText() + (String)dtde.getTransferable().getTransferData(DataFlavor.stringFlavor)); + } catch (Exception e) { + } + } + }; + final DropTarget dt = new DropTarget(tf, dtl); + + Button b_add = new Button("Add client"); + b_add.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + addClient(); + } + }); + Button b_remove = new Button("Remove client"); + b_remove.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (clientCont.getComponentCount() != 0) { + clientCont.remove(clientCont.getComponentCount()-1); + } + } + }); + b_close = new JButton("Close modal dialog"); + b_close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + modal_d.dispose(); + } + }); + b_modal = new Button("Show modal dialog"); + b_modal.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + modal_d = new JDialog(f, "Modal dialog", true); + modal_d.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + modal_d.setBounds(0, 100, 200, 50); + modal_d.getContentPane().add(b_close); + modal_d.validate(); + modal_d.show(); + } + }); + + bcont.add(tf); + bcont.add(toFocus); + bcont.add(b_add); + bcont.add(b_remove); + bcont.add(b_modal); + if (manual) { + Button pass = new Button("Pass"); + pass.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + passed = true; + synchronized(TestXEmbedServer.this) { + TestXEmbedServer.this.notifyAll(); + } + } + }); + bcont.add(pass); + Button fail = new Button("Fail"); + fail.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + passed = false; + synchronized(TestXEmbedServer.this) { + TestXEmbedServer.this.notifyAll(); + } + } + }); + bcont.add(fail); + } + b_modal.setName("2"); + bcont.setLayout(new FlowLayout()); + f.add(bcont, BorderLayout.NORTH); + + clientCont = Box.createVerticalBox(); + f.add(clientCont, BorderLayout.CENTER); + + dummy = new JFrame("Dummy"); + dummy.getContentPane().add(new JButton("Button")); + dummy.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dummy.setBounds(0, 0, 100, 100); + dummy.setVisible(true); + + f.setBounds(300, 0, 800, 300); + f.setVisible(true); + } + + public abstract Process startClient(Rectangle bounds[], long window); + + public void addClient() { + client = new Canvas() { + public void paint(Graphics g) { + super.paint(g); + } + }; + client.setBackground(new Color(30, 220, 40)); + clientCont.add(client); + clientCont.validate(); + WindowIDProvider pid = (WindowIDProvider)client.getPeer(); + log.fine("Added XEmbed server(Canvas) with X window ID " + pid.getWindow()); + Rectangle toFocusBounds = toFocus.getBounds(); + toFocusBounds.setLocation(toFocus.getLocationOnScreen()); + f.validate(); + + // KDE doesn't accept clicks on title as activation - click below title + Rectangle fbounds = f.getBounds(); + fbounds.y += f.getInsets().top; + fbounds.height -= f.getInsets().top; + + Process proc = startClient(new Rectangle[] {fbounds, dummy.getBounds(), toFocusBounds, + new Rectangle(b_modal.getLocationOnScreen(), b_modal.getSize()), + new Rectangle(10, 130, 20, 20)}, pid.getWindow()); + new ClientWatcher(client, proc, clientCont).start(); + } + + public void dispose() { + f.dispose(); + f = null; + dummy.dispose(); + dummy = null; + if (modal_d != null) { + modal_d.dispose(); + modal_d = null; + } + } +} + +class ClientWatcher extends Thread { + private Process clientProcess; + private Canvas client; + private Container parent; + public ClientWatcher(Canvas client, Process proc, Container parent) { + this.client = client; + this.clientProcess = proc; + this.parent = parent; + } + + public void run() { + try { + clientProcess.waitFor(); + } catch (InterruptedException ie) { + } + parent.remove(client); + } +} diff --git a/jdk/test/java/awt/xembed/server/TestXEmbedServerJava.java b/jdk/test/java/awt/xembed/server/TestXEmbedServerJava.java new file mode 100644 index 00000000000..1504f269167 --- /dev/null +++ b/jdk/test/java/awt/xembed/server/TestXEmbedServerJava.java @@ -0,0 +1,86 @@ +/* + * Copyright 2004-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 4931668 + * @summary Tests XEmbed server/client functionality + * @author denis mikhalkin: area=awt.xembed + * @compile JavaClient.java TesterClient.java TestXEmbedServer.java + * @run main/manual TestXEmbedServerJava + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import java.io.*; + +public class TestXEmbedServerJava extends TestXEmbedServer { + public static void main(String[] args) { + if (System.getProperty("os.name").toLowerCase().startsWith("win")) { + return; + } + + // Enabled XEmbed + System.setProperty("sun.awt.xembedserver", "true"); + + String instruction = + "This is a manual test for XEmbed server functionality. \n" + + "You may start XEmbed client by pressing 'Add client' button.\n" + + "Check that focus transfer with mouse works, that focus traversal with Tab/Shift-Tab works.\n" + + "Check that XEmbed server client's growing and shrinking.\n" + + "Check that Drag&Drop works in all combinations.\n" + + "Check the keyboard input works in both text fields.\n"; + Frame f = new Frame("Instructions"); + f.setLayout(new BorderLayout()); + f.add(new TextArea(instruction), BorderLayout.CENTER); + f.pack(); + f.setLocation(0, 400); + f.setVisible(true); + + TestXEmbedServerJava lock = new TestXEmbedServerJava(); + try { + synchronized(lock) { + lock.wait(); + } + } catch (InterruptedException e) { + } + if (!lock.isPassed()) { + throw new RuntimeException("Test failed"); + } + } + + public TestXEmbedServerJava() { + super(true); + } + + public Process startClient(Rectangle[] bounds, long window) { + try { + String java_home = System.getProperty("java.home"); + return Runtime.getRuntime().exec(java_home + "/bin/java JavaClient " + window); + } catch (IOException ex1) { + ex1.printStackTrace(); + } + return null; + } +} diff --git a/jdk/test/java/awt/xembed/server/TesterClient.java b/jdk/test/java/awt/xembed/server/TesterClient.java new file mode 100644 index 00000000000..78ae9f6cc11 --- /dev/null +++ b/jdk/test/java/awt/xembed/server/TesterClient.java @@ -0,0 +1,59 @@ +/* + * Copyright 2004-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. + */ + +import java.lang.reflect.*; +import java.awt.Rectangle; +import java.util.logging.*; + +public class TesterClient { + private static final Logger log = Logger.getLogger("test.xembed.TesterClient"); + private static Method test; + private static boolean passed = false; + public static void main(String[] args) throws Throwable { + // First parameter is the name of the test, second is the window, the rest are rectangles + Class cl = Class.forName("sun.awt.X11.XEmbedServerTester"); + test = cl.getMethod(args[0], new Class[0]); + long window = Long.parseLong(args[1]); + Rectangle r[] = new Rectangle[(args.length-2)/4]; + for (int i = 0; i < r.length; i++) { + r[i] = new Rectangle(Integer.parseInt(args[2+i*4]), Integer.parseInt(args[2+i*4+1]), + Integer.parseInt(args[2+i*4+2]), Integer.parseInt(args[2+i*4+3])); + } + startClient(r, window); + } + + public static void startClient(Rectangle bounds[], long window) throws Throwable { + Method m_getTester = Class.forName("sun.awt.X11.XEmbedServerTester"). + getMethod("getTester", new Class[] {bounds.getClass(), Long.TYPE}); + final Object tester = m_getTester.invoke(null, new Object[] {bounds, window}); + try { + log.info("Starting test " + test.getName()); + test.invoke(tester, (Object[])null); + log.info("Test " + test.getName() + " PASSED."); + passed = true; + } catch (Exception e) { + log.log(Level.WARNING, "Test " + test.getName() + " FAILED.", e); + } + System.exit(passed?0:1); + } +} From f1854fe0bf14bd75684bc26d147d5e0f13afd099 Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Mon, 14 Apr 2008 15:21:16 +0400 Subject: [PATCH 26/46] 6471693: Moving the vertical scroll bar of List in FileDialog leads Flickering in solaris Unite paint() calls in one call Reviewed-by: son --- .../classes/sun/awt/X11/XListPeer.java | 226 ++++++++---------- 1 file changed, 100 insertions(+), 126 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XListPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XListPeer.java index 92b5ce00c00..56c4ef9d2aa 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XListPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XListPeer.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -55,14 +55,15 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { public final static int DEFAULT_VISIBLE_ROWS = 4; // From java.awt.List, public final static int HORIZ_SCROLL_AMT = 10; - final static int - PAINT_VSCROLL = 2, - PAINT_HSCROLL = 4, - PAINT_ITEMS = 8, - PAINT_FOCUS = 16, - PAINT_BACKGROUND = 32, - PAINT_HIDEFOCUS = 64, - PAINT_ALL = PAINT_VSCROLL | PAINT_HSCROLL | PAINT_ITEMS | PAINT_FOCUS | PAINT_BACKGROUND; + private final static int PAINT_VSCROLL = 2; + private final static int PAINT_HSCROLL = 4; + private final static int PAINT_ITEMS = 8; + private final static int PAINT_FOCUS = 16; + private final static int PAINT_BACKGROUND = 32; + private final static int PAINT_HIDEFOCUS = 64; + private final static int PAINT_ALL = + PAINT_VSCROLL | PAINT_HSCROLL | PAINT_ITEMS | PAINT_FOCUS | PAINT_BACKGROUND; + private final static int COPY_AREA = 128; XVerticalScrollbar vsb; XHorizontalScrollbar hsb; @@ -363,35 +364,6 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { } } - Area getItemsArea(int firstItem, int lastItem) { - firstItem = Math.max(getFirstVisibleItem(), firstItem); - lastItem = Math.min(lastItem, getLastVisibleItem()); - if (lastItem < getFirstVisibleItem()) { - return new Area(); - } - if (firstItem <= lastItem) { - int startY = getItemY(firstItem); - int endY = getItemY(lastItem) + getItemHeight(); - // Account for focus rectangle, instead should be called twice - before change - // of focusIndex and after - startY -= 2; - endY += 2; - // x is 0 since we need to account for focus rectangle, - // the same with width - return new Area(new Rectangle(0, startY, getItemWidth() + 3, endY-startY+1)); - } else { - return new Area(); - } - } - - Rectangle getItemRect(int item) { - return new Rectangle(MARGIN, getItemY(item), getItemWidth(), getItemHeight()); - } - - Area getItemArea(int item) { - return new Area(getItemRect(item)); - } - public void repaintScrollbarRequest(XScrollbar scrollbar) { Graphics g = getGraphics(); if (scrollbar == hsb) { @@ -411,14 +383,36 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { repaint(getFirstVisibleItem(), getLastVisibleItem(), PAINT_ALL); } - public void repaint(int options) { + private void repaint(int options) { repaint(getFirstVisibleItem(), getLastVisibleItem(), options); } - public void repaint(int firstItem, int lastItem, int options) { + private void repaint(int firstItem, int lastItem, int options) { + repaint(firstItem, lastItem, options, null, null); + } + + /** + * In most cases the entire area of the component doesn't have + * to be repainted. The method repaints the particular areas of + * the component. The areas to repaint is specified by the option + * parameter. The possible values of the option parameter are: + * PAINT_VSCROLL, PAINT_HSCROLL, PAINT_ITEMS, PAINT_FOCUS, + * PAINT_HIDEFOCUS, PAINT_BACKGROUND, PAINT_ALL, COPY_AREA. + * + * Note that the COPY_AREA value initiates copy of a source area + * of the component by a distance by means of the copyArea method + * of the Graphics class. + * + * @param firstItem the position of the first item of the range to repaint + * @param lastItem the position of the last item of the range to repaint + * @param options specifies the particular area of the component to repaint + * @param source the area of the component to copy + * @param distance the distance to copy the source area + */ + private void repaint(int firstItem, int lastItem, int options, Rectangle source, Point distance) { Graphics g = getGraphics(); try { - painter.paint(g, firstItem, lastItem, options); + painter.paint(g, firstItem, lastItem, options, source, distance); } finally { g.dispose(); } @@ -1449,35 +1443,29 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { } vsb.setValue(vsb.getValue() + y); + Rectangle source = null; + Point distance = null; + int firstItem = 0, lastItem = 0; + int options = PAINT_HIDEFOCUS | PAINT_ITEMS | PAINT_VSCROLL | PAINT_FOCUS; if (y > 0) { - // Fixed 6308295: XAWTduplicate list item is displayed - // Window resizing leads to the buffer flushing - // That's why the repainting with the PAINT_HIDEFOCUS option is the repainting with PAINT_ALL option - // So we should do only the repainting instead of the copy area - if (y < itemsInWin && painter.isBuffer()) { - if (log.isLoggable(Level.FINEST)) { - log.finest("Copying " + "" + MARGIN + "," + ( MARGIN + pixelsToScroll) - + "," + (width - SCROLLBAR_AREA) + "," + (h * (itemsInWin - y)-1) + - "," + 0 + "," + (-pixelsToScroll)); - } - // Unpaint focus before copying - repaint(PAINT_HIDEFOCUS); - painter.copyArea(MARGIN, MARGIN + pixelsToScroll, width - SCROLLBAR_AREA, h * (itemsInWin - y - 1)-1, 0, -pixelsToScroll); + if (y < itemsInWin) { + source = new Rectangle(MARGIN, MARGIN + pixelsToScroll, width - SCROLLBAR_AREA, h * (itemsInWin - y - 1)-1); + distance = new Point(0, -pixelsToScroll); + options |= COPY_AREA; } - repaint(vsb.getValue() + (itemsInWin - y)-1, (vsb.getValue() + itemsInWin) - 1, PAINT_ITEMS | PAINT_VSCROLL | PAINT_FOCUS); - } else if (y < 0 && painter.isBuffer()) { + firstItem = vsb.getValue() + itemsInWin - y - 1; + lastItem = vsb.getValue() + itemsInWin - 1; + + } else if (y < 0) { if (y + itemsInWindow() > 0) { - if (log.isLoggable(Level.FINEST)) { - log.finest("Copying " + MARGIN + "," + MARGIN +"," + - (width - SCROLLBAR_AREA) + "," + - (h * (itemsInWin + y)) + "," + "0" +"," +(-pixelsToScroll)); - } - repaint(PAINT_HIDEFOCUS); - painter.copyArea(MARGIN, MARGIN, width - SCROLLBAR_AREA, h * (itemsInWin + y), 0, -pixelsToScroll); + source = new Rectangle(MARGIN, MARGIN, width - SCROLLBAR_AREA, h * (itemsInWin + y)); + distance = new Point(0, -pixelsToScroll); + options |= COPY_AREA; } - int e = Math.min(getLastVisibleItem(), vsb.getValue() + -y); - repaint(vsb.getValue(), e, PAINT_ITEMS | PAINT_VSCROLL | PAINT_FOCUS); + firstItem = vsb.getValue(); + lastItem = Math.min(getLastVisibleItem(), vsb.getValue() + -y); } + repaint(firstItem, lastItem, options, source, distance); } /** @@ -1491,12 +1479,17 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { int h = height - (SCROLLBAR_AREA + (2 * MARGIN)); hsb.setValue(hsb.getValue() + x); - if (x < 0 && painter.isBuffer()) { - painter.copyArea(MARGIN + SPACE, MARGIN, w + x, h, -x, 0); - } else if (x > 0 && painter.isBuffer()) { - painter.copyArea(MARGIN + SPACE + x, MARGIN, w - x, h, -x, 0); + Rectangle source = null; + Point distance = null; + if (x < 0) { + source = new Rectangle(MARGIN + SPACE, MARGIN, w + x, h); + distance = new Point(-x, 0); + } else if (x > 0) { + source = new Rectangle(MARGIN + SPACE + x, MARGIN, w - x, h); + distance = new Point(-x, 0); } - repaint(vsb.getValue(), lastItemDisplayed(), PAINT_ITEMS | PAINT_HSCROLL); + int options = COPY_AREA | PAINT_ITEMS | PAINT_HSCROLL; + repaint(vsb.getValue(), lastItemDisplayed(), options, source, distance); } /** @@ -1677,7 +1670,6 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { * Since we can't guarantee the sequence, use awtLock. */ class ListPainter { - // TODO: use VolatileImage VolatileImage buffer; Color[] colors; @@ -1746,6 +1738,11 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { } private void paint(Graphics listG, int firstItem, int lastItem, int options) { + paint(listG, firstItem, lastItem, options, null, null); + } + + private void paint(Graphics listG, int firstItem, int lastItem, int options, + Rectangle source, Point distance) { if (log.isLoggable(Level.FINER)) log.finer("Repaint from " + firstItem + " to " + lastItem + " options " + options); if (firstItem > lastItem) { int t = lastItem; @@ -1773,17 +1770,34 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { invalidate(); options = PAINT_ALL; continue; + case VolatileImage.IMAGE_RESTORED: + options = PAINT_ALL; } Graphics g = localBuffer.createGraphics(); + // Note that the order of the following painting operations + // should not be modified try { g.setFont(getFont()); + + // hiding the focus rectangle must be done prior to copying + // area and so this is the first action to be performed + if ((options & (PAINT_HIDEFOCUS)) != 0) { + paintFocus(g, PAINT_HIDEFOCUS); + } + /* + * The shift of the component contents occurs while someone + * scrolls the component, the only purpose of the shift is to + * increase the painting performance. The shift should be done + * prior to painting any area (except hiding focus) and actually + * it should never be done jointly with erase background. + */ + if ((options & COPY_AREA) != 0) { + g.copyArea(source.x, source.y, source.width, source.height, + distance.x, distance.y); + } if ((options & PAINT_BACKGROUND) != 0) { - g.setColor(SystemColor.window); - g.fillRect(0, 0, width, height); - g.setColor(getListBackground()); - g.fillRect(0, 0, listWidth, listHeight); - draw3DRect(g, getSystemColors(), 0, 0, listWidth - 1, listHeight - 1, false); + paintBackground(g); // Since we made full erase update items firstItem = getFirstVisibleItem(); lastItem = getLastVisibleItem(); @@ -1799,8 +1813,8 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { g.setClip(getHScrollBarRec()); paintHorScrollbar(g, true); } - if ((options & (PAINT_FOCUS|PAINT_HIDEFOCUS)) != 0) { - paintFocus(g, options); + if ((options & (PAINT_FOCUS)) != 0) { + paintFocus(g, PAINT_FOCUS); } } finally { g.dispose(); @@ -1809,6 +1823,14 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { listG.drawImage(localBuffer, 0, 0, null); } + private void paintBackground(Graphics g) { + g.setColor(SystemColor.window); + g.fillRect(0, 0, width, height); + g.setColor(getListBackground()); + g.fillRect(0, 0, listWidth, listHeight); + draw3DRect(g, getSystemColors(), 0, 0, listWidth - 1, listHeight - 1, false); + } + private void paintItems(Graphics g, int firstItem, int lastItem, int options) { if (log.isLoggable(Level.FINER)) log.finer("Painting items from " + firstItem + " to " + lastItem + ", focused " + focusIndex + ", first " + getFirstVisibleItem() + ", last " + getLastVisibleItem()); @@ -1932,53 +1954,5 @@ class XListPeer extends XComponentPeer implements ListPeer, XScrollbarClient { } g.setClip(clip); } - - public void copyArea(int x, int y, int width, int height, int dx, int dy) { - if (log.isLoggable(Level.FINER)) log.finer("Copying area " + x + ", " + y + " " + width + - "x" + height + ", (" + dx + "," + dy + ")"); - VolatileImage localBuffer = null; - do { - XToolkit.awtLock(); - try { - if (createBuffer()) { - // Newly created buffer should be painted over at full - repaint(PAINT_ALL); - return; - } - localBuffer = buffer; - } finally { - XToolkit.awtUnlock(); - } - switch (localBuffer.validate(getGraphicsConfiguration())) { - case VolatileImage.IMAGE_INCOMPATIBLE: - invalidate(); - case VolatileImage.IMAGE_RESTORED: - // Since we've lost the content we can't just scroll - we should paint again - repaint(PAINT_ALL); - return; - } - Graphics g = localBuffer.createGraphics(); - try { - g.copyArea(x, y, width, height, dx, dy); - } finally { - g.dispose(); - } - } while (localBuffer.contentsLost()); - Graphics listG = getGraphics(); - listG.setClip(x, y, width, height); - listG.drawImage(localBuffer, 0, 0, null); - listG.dispose(); - } - - public boolean isBuffer() { - boolean isBuffer; - XToolkit.awtLock(); - try { - isBuffer = (buffer != null); - } finally { - XToolkit.awtUnlock(); - } - return isBuffer; - } } } From c942da3f2e13f8d8f3ef7649d66227cae2131f1f Mon Sep 17 00:00:00 2001 From: Dmitry Cherepanov Date: Mon, 14 Apr 2008 15:53:32 +0400 Subject: [PATCH 27/46] 6688067: regression test for 6471693 is missed Added regression test Reviewed-by: son --- .../awt/List/ListFlickers/ListFlickers.java | 402 ++++++++++++++++++ 1 file changed, 402 insertions(+) create mode 100644 jdk/test/java/awt/List/ListFlickers/ListFlickers.java diff --git a/jdk/test/java/awt/List/ListFlickers/ListFlickers.java b/jdk/test/java/awt/List/ListFlickers/ListFlickers.java new file mode 100644 index 00000000000..47598f75d83 --- /dev/null +++ b/jdk/test/java/awt/List/ListFlickers/ListFlickers.java @@ -0,0 +1,402 @@ +/* + * 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 6471693 + @summary Moving the vertical scroll bar of List leads flickering. + @author Dmitry Cherepanov area=awt.list + @run main/manual ListFlickers +*/ + +import java.awt.*; +import java.awt.event.*; + +public class ListFlickers +{ + + //*** test-writer defined static variables go here *** + + + private static void init() + { + //*** Create instructions for the user here *** + + String[] instructions = + { + "drag the scrollbar of the list up and down,", + "if the list flickers then the test fails,", + "otherwise it passes." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + + Frame f = new Frame(); + List list = new List(10, false); + for (int i = 0; i < 100; i++) { + list.add(" item "+i); + } + f.add(list); + f.setBounds(100,100,300,300); + f.setVisible(true); + + }//End init() + + + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test-defined + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test passed nor test failed has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + //pass was called from a different thread, so set the flag and interrupt + // the main thead. + theTestPassed = true; + testGeneratedInterrupt = true; + if (mainThread != null){ + mainThread.interrupt(); + } + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class ManualMainTest + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// make listeners in a class defined here, and instantiate them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + ManualMainTest.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + ManualMainTest.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + private static boolean numbering = false; + private static int messageNumber = 0; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + /* Enables message counting for the tester. */ + public static void enableNumbering(boolean enable){ + numbering = enable; + } + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + if (numbering) { + messageIn = "" + messageNumber + " " + messageIn; + messageNumber++; + } + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog implements ActionListener +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + Panel buttonP = new Panel(); + Button passB = new Button( "pass" ); + Button failB = new Button( "fail" ); + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + passB = new Button( "pass" ); + passB.setActionCommand( "pass" ); + passB.addActionListener( this ); + buttonP.add( "East", passB ); + + failB = new Button( "fail" ); + failB.setActionCommand( "fail" ); + failB.addActionListener( this ); + buttonP.add( "West", failB ); + + add( "South", buttonP ); + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + + //catch presses of the passed and failed buttons. + //simply call the standard pass() or fail() static methods of + //ManualMainTest + public void actionPerformed( ActionEvent e ) + { + if( e.getActionCommand() == "pass" ) + { + ListFlickers.pass(); + } + else + { + ListFlickers.fail(); + } + } + +}// TestDialog class From 697620a8bb998ae3b949e45218cb8a26db495c79 Mon Sep 17 00:00:00 2001 From: Mikhail Lapshin Date: Mon, 14 Apr 2008 16:41:00 +0400 Subject: [PATCH 28/46] 6612531: api/javax_swing/ScrollPaneLayout/index.html#xxxLayoutSize (ScrollPaneLayout2024) throws NPE Added a check for the NPE Reviewed-by: alexp --- .../classes/javax/swing/ScrollPaneLayout.java | 8 +++- .../swing/JScrollPane/6612531/bug6612531.java | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 jdk/test/javax/swing/JScrollPane/6612531/bug6612531.java diff --git a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java index 34aa1cae629..ed769a92937 100644 --- a/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java +++ b/jdk/src/share/classes/javax/swing/ScrollPaneLayout.java @@ -488,10 +488,14 @@ public class ScrollPaneLayout Dimension viewSize = null; Component view = null; - if (viewport != null) { + if (viewport != null) { extentSize = viewport.getPreferredSize(); view = viewport.getView(); - viewSize = view.getPreferredSize(); + if (view != null) { + viewSize = view.getPreferredSize(); + } else { + viewSize = new Dimension(0, 0); + } } /* If there's a viewport add its preferredSize. diff --git a/jdk/test/javax/swing/JScrollPane/6612531/bug6612531.java b/jdk/test/javax/swing/JScrollPane/6612531/bug6612531.java new file mode 100644 index 00000000000..548d3c0f812 --- /dev/null +++ b/jdk/test/javax/swing/JScrollPane/6612531/bug6612531.java @@ -0,0 +1,42 @@ +/* + * 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 6612531 + * @summary Checks that ScrollPaneLayout.preferredLayoutSize() doesn't throw NPE. + * @author Mikhail Lapshin + * @run main bug6612531 + */ + +import javax.swing.*; + +public class bug6612531 { + public static void main(String[] args) { + ScrollPaneLayout c = new ScrollPaneLayout(); + JViewport vp = new JViewport(); + c.addLayoutComponent("VIEWPORT", vp); + c.preferredLayoutSize(new JScrollPane()); + System.out.println("Test passed"); + } +} From bcbd82060a161bf84d65ab1397ee205e095d299b Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Tue, 15 Apr 2008 14:00:29 +0400 Subject: [PATCH 29/46] 6430553: MouseClick event should not be fired if MouseRelease happened without MousePress Verify that the there was a PRESS event before sending CLICK event Reviewed-by: son, dcherepanov --- .../solaris/classes/sun/awt/X11/XWindow.java | 28 ++++++++++++------- .../native/sun/windows/awt_Component.cpp | 20 ++++++++----- .../native/sun/windows/awt_Component.h | 16 ++++++----- .../native/sun/windows/awt_TrayIcon.cpp | 10 +++---- .../windows/native/sun/windows/awt_TrayIcon.h | 14 ++++++---- 5 files changed, 53 insertions(+), 35 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java index f7ef09b2e11..2c894ce1b20 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java @@ -103,12 +103,14 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { return defaultFont; } - /* - * Keeps all buttons which were pressed at the time of the last mouse - * drag until all buttons will be released, contains state as bit masks - * Button1Mask, Button2Mask, Button3Mask - */ - private int mouseDragState = 0; + /* A bitmask keeps the button's numbers as Button1Mask, Button2Mask, Button3Mask + * which are allowed to + * generate the CLICK event after the RELEASE has happened. + * There are conditions that must be true for that sending CLICK event: + * 1) button was initially PRESSED + * 2) no movement or drag has happened until RELEASE + */ + private int mouseButtonClickAllowed = 0; native int getNativeColor(Color clr, GraphicsConfiguration gc); native void getWMInsets(long window, long left, long top, long right, long bottom, long border); @@ -660,6 +662,8 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } if (type == XConstants.ButtonPress) { + //Allow this mouse button to generate CLICK event on next ButtonRelease + mouseButtonClickAllowed |= getButtonMask(lbutton); XWindow lastWindow = (lastWindowRef != null) ? ((XWindow)lastWindowRef.get()):(null); /* multiclick checking @@ -715,8 +719,8 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { postEventToEventQueue(me); - if (((mouseDragState & getButtonMask(lbutton)) == 0) && // No up-button in the drag-state - (type == XConstants.ButtonRelease)) + if ((type == XConstants.ButtonRelease) && + ((mouseButtonClickAllowed & getButtonMask(lbutton)) != 0) ) // No up-button in the drag-state { postEventToEventQueue(me = new MouseEvent((Component)getEventSource(), MouseEvent.MOUSE_CLICKED, @@ -743,7 +747,11 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { } } - mouseDragState &= ~getButtonMask(lbutton); // Exclude the up-button from the drag-state + /* Update the state variable AFTER the CLICKED event post. */ + if (type == XConstants.ButtonRelease) { + /* Exclude this mouse button from allowed list.*/ + mouseButtonClickAllowed &= ~getButtonMask(lbutton); + } } public void handleMotionNotify(XEvent xev) { @@ -776,7 +784,7 @@ public class XWindow extends XBaseWindow implements X11ComponentPeer { Math.abs(lastY - y) < AWT_MULTICLICK_SMUDGE))) { clickCount = 0; lastWindowRef = null; - mouseDragState = mouseKeyState; + mouseButtonClickAllowed = 0; lastTime = 0; lastX = 0; lastY = 0; diff --git a/jdk/src/windows/native/sun/windows/awt_Component.cpp b/jdk/src/windows/native/sun/windows/awt_Component.cpp index 5dc8ff6fe9d..cc0d3569dc8 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp @@ -234,6 +234,7 @@ int AwtComponent::sm_wheelRotationAmount = 0; AwtComponent::AwtComponent() { + m_mouseButtonClickAllowed = 0; m_callbacksEnabled = FALSE; m_hwnd = NULL; @@ -246,7 +247,6 @@ AwtComponent::AwtComponent() m_nextControlID = 1; m_childList = NULL; m_myControlID = 0; - m_mouseDragState = 0; m_hdwp = NULL; m_validationNestCount = 0; @@ -2514,9 +2514,11 @@ MsgRouting AwtComponent::WmMouseDown(UINT flags, int x, int y, int button) lastClickX = x; lastClickY = y; } + /* + *Set appropriate bit of the mask on WM_MOUSE_DOWN message. + */ + m_mouseButtonClickAllowed |= GetButtonMK(button); lastTime = now; - // it's needed only if WM_LBUTTONUP doesn't come for some reason - m_mouseDragState &= ~GetButtonMK(button); MSG msg; InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y); @@ -2554,14 +2556,17 @@ MsgRouting AwtComponent::WmMouseUp(UINT flags, int x, int y, int button) (GetButton(button) == java_awt_event_MouseEvent_BUTTON3 ? TRUE : FALSE), GetButton(button), &msg); /* - * If no movement, then report a click following the button release + * If no movement, then report a click following the button release. + * When WM_MOUSEUP comes to a window without previous WM_MOUSEDOWN, + * spurous MOUSE_CLICK is about to happen. See 6430553. */ - if (!(m_mouseDragState & GetButtonMK(button))) { // No up-button in the drag-state + if ((m_mouseButtonClickAllowed & GetButtonMK(button)) != 0) { //CLICK allowed SendMouseEvent(java_awt_event_MouseEvent_MOUSE_CLICKED, TimeHelper::getMessageTimeUTC(), x, y, GetJavaModifiers(), clickCount, JNI_FALSE, GetButton(button)); } - m_mouseDragState &= ~GetButtonMK(button); // Exclude the up-button from the drag-state + // Exclude button from allowed to generate CLICK messages + m_mouseButtonClickAllowed &= ~GetButtonMK(button); if ((flags & ALL_MK_BUTTONS) == 0) { // only update if all buttons have been released @@ -2605,7 +2610,8 @@ MsgRouting AwtComponent::WmMouseMove(UINT flags, int x, int y) SendMouseEvent(java_awt_event_MouseEvent_MOUSE_DRAGGED, TimeHelper::getMessageTimeUTC(), x, y, GetJavaModifiers(), 0, JNI_FALSE, java_awt_event_MouseEvent_NOBUTTON, &msg); - m_mouseDragState = flags; + //dragging means no more CLICKs until next WM_MOUSE_DOWN/WM_MOUSE_UP message sequence + m_mouseButtonClickAllowed = 0; } else { MSG msg; InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y); diff --git a/jdk/src/windows/native/sun/windows/awt_Component.h b/jdk/src/windows/native/sun/windows/awt_Component.h index ecc7ef5ea33..ea3bd2066f6 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.h +++ b/jdk/src/windows/native/sun/windows/awt_Component.h @@ -707,13 +707,6 @@ protected: BOOL m_backgroundColorSet; BOOL m_visible; /* copy of Component.visible */ - /* - * Keeps all buttons which were pressed at the time of the last mouse - * drag until all buttons will be released, contains state as bit masks - * MK_LBUTTON, MK_MBUTTON, MK_RBUTTON - */ - UINT m_mouseDragState; - static BOOL sm_suppressFocusAndActivation; static HWND sm_realFocusOpposite; @@ -725,6 +718,15 @@ protected: static UINT sm_95WheelSupport; private: + /* A bitmask keeps the button's numbers as MK_LBUTTON, MK_MBUTTON, MK_RBUTTON + * which are allowed to + * generate the CLICK event after the RELEASE has happened. + * There are conditions that must be true for that sending CLICK event: + * 1) button was initially PRESSED + * 2) no movement or drag has happened until RELEASE + */ + UINT m_mouseButtonClickAllowed; + BOOL m_bSubclassed; COLORREF m_colorForeground; diff --git a/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp b/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp index 2b75d4cb01f..b8e7bddabbd 100644 --- a/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp +++ b/jdk/src/windows/native/sun/windows/awt_TrayIcon.cpp @@ -84,7 +84,7 @@ AwtTrayIcon::AwtTrayIcon() { if (sm_instCount++ == 0 && AwtTrayIcon::sm_msgWindow == NULL) { sm_msgWindow = AwtTrayIcon::CreateMessageWindow(); } - m_mouseDragState = 0; + m_mouseButtonClickAllowed = 0; } AwtTrayIcon::~AwtTrayIcon() { @@ -349,7 +349,7 @@ MsgRouting AwtTrayIcon::WmMouseDown(UINT flags, int x, int y, int button) } lastTime = now; // it's needed only if WM_LBUTTONUP doesn't come for some reason - m_mouseDragState &= ~AwtComponent::GetButtonMK(button); + m_mouseButtonClickAllowed |= AwtComponent::GetButtonMK(button); MSG msg; AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y); @@ -371,12 +371,12 @@ MsgRouting AwtTrayIcon::WmMouseUp(UINT flags, int x, int y, int button) (AwtComponent::GetButton(button) == java_awt_event_MouseEvent_BUTTON3 ? TRUE : FALSE), AwtComponent::GetButton(button), &msg); - if (!(m_mouseDragState & AwtComponent::GetButtonMK(button))) { // No up-button in the drag-state + if ((m_mouseButtonClickAllowed & AwtComponent::GetButtonMK(button)) != 1) { // No up-button in the drag-state SendMouseEvent(java_awt_event_MouseEvent_MOUSE_CLICKED, TimeHelper::windowsToUTC(::GetTickCount()), x, y, AwtComponent::GetJavaModifiers(), clickCount, JNI_FALSE, AwtComponent::GetButton(button)); } - m_mouseDragState &= ~AwtComponent::GetButtonMK(button); // Exclude the up-button from the drag-state + m_mouseButtonClickAllowed &= ~AwtComponent::GetButtonMK(button); // Exclude the up-button from the drag-state return mrConsume; } @@ -398,7 +398,7 @@ MsgRouting AwtTrayIcon::WmMouseMove(UINT flags, int x, int y) lastY = y; AwtComponent::InitMessage(&msg, lastMessage, flags, MAKELPARAM(x, y), x, y); if ((flags & AwtComponent::ALL_MK_BUTTONS) != 0) { - m_mouseDragState = flags; + m_mouseButtonClickAllowed = 0; } else { SendMouseEvent(java_awt_event_MouseEvent_MOUSE_MOVED, TimeHelper::windowsToUTC(::GetTickCount()), x, y, AwtComponent::GetJavaModifiers(), 0, JNI_FALSE, diff --git a/jdk/src/windows/native/sun/windows/awt_TrayIcon.h b/jdk/src/windows/native/sun/windows/awt_TrayIcon.h index 02942bedc44..2db1ab236cf 100644 --- a/jdk/src/windows/native/sun/windows/awt_TrayIcon.h +++ b/jdk/src/windows/native/sun/windows/awt_TrayIcon.h @@ -176,12 +176,14 @@ public: private: AWT_NOTIFYICONDATA m_nid; - /* - * Keeps all buttons which were pressed at the time of the last mouse - * drag until all buttons will be released, contains state as bit masks - * MK_LBUTTON, MK_MBUTTON, MK_RBUTTON - */ - UINT m_mouseDragState; + /* A bitmask keeps the button's numbers as MK_LBUTTON, MK_MBUTTON, MK_RBUTTON + * which are allowed to + * generate the CLICK event after the RELEASE has happened. + * There are conditions that must be true for that sending CLICK event: + * 1) button was initially PRESSED + * 2) no movement or drag has happened until RELEASE + */ + UINT m_mouseButtonClickAllowed; class TrayIconListItem { public: From 0d2e60cbc6dea624af851788a59e50cc5cc6fd1f Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Fri, 18 Apr 2008 11:38:32 +0400 Subject: [PATCH 30/46] 6690036: some code cleanup for insets-related code All insets-related code from XWindowPeer, XFramePeer, and XDialogPeer has been moved to XDecoratedPeer. Reviewed-by: anthony --- .../classes/sun/awt/X11/XDecoratedPeer.java | 111 +++++++++++------- .../classes/sun/awt/X11/XDialogPeer.java | 8 -- .../classes/sun/awt/X11/XFramePeer.java | 8 -- .../classes/sun/awt/X11/XWindowPeer.java | 45 +------ 4 files changed, 71 insertions(+), 101 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java index d2241d13e5c..5984db22493 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java @@ -40,9 +40,7 @@ abstract class XDecoratedPeer extends XWindowPeer { private static final Logger log = Logger.getLogger("sun.awt.X11.XDecoratedPeer"); private static final Logger insLog = Logger.getLogger("sun.awt.X11.insets.XDecoratedPeer"); private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XDecoratedPeer"); - private final static Logger iconLog = Logger.getLogger("sun.awt.X11.icon.XDecoratedPeer"); - - private static XAtom resize_request = new XAtom("_SUN_AWT_RESIZE_REQUEST", false); + private static final Logger iconLog = Logger.getLogger("sun.awt.X11.icon.XDecoratedPeer"); // Set to true when we get the first ConfigureNotify after being // reparented - indicates that WM has adopted the top-level. @@ -73,14 +71,11 @@ abstract class XDecoratedPeer extends XWindowPeer { void preInit(XCreateWindowParams params) { super.preInit(params); - if (!resize_request.isInterned()) { - resize_request.intern(false); - } winAttr.initialFocus = true; - currentInsets = new Insets(0,0,0,0); // replacemenet for wdata->top, left, bottom, right - + currentInsets = new Insets(0,0,0,0); applyGuessedInsets(); + Rectangle bounds = (Rectangle)params.get(BOUNDS); dimensions = new WindowDimensions(bounds, getRealInsets(), false); params.put(BOUNDS, dimensions.getClientRect()); @@ -98,7 +93,10 @@ abstract class XDecoratedPeer extends XWindowPeer { // happen after the X window is created. initResizability(); updateSizeHints(dimensions); + XWM.requestWMExtents(getWindow()); + content = XContentWindow.createContent(this); + if (warningWindow != null) { warningWindow.toFront(); } @@ -121,7 +119,6 @@ abstract class XDecoratedPeer extends XWindowPeer { updateMinSizeHints(); } - private void updateMinSizeHints() { if (isResizable()) { Dimension minimumSize = getTargetMinimumSize(); @@ -238,23 +235,59 @@ abstract class XDecoratedPeer extends XWindowPeer { return false; } - Insets difference(Insets i1, Insets i2) { + private static Insets difference(Insets i1, Insets i2) { return new Insets(i1.top-i2.top, i1.left - i2.left, i1.bottom-i2.bottom, i1.right-i2.right); } - void add(Insets i1, Insets i2) { - i1.left += i2.left; - i1.top += i2.top; - i1.right += i2.right; - i1.bottom += i2.bottom; - } - boolean isNull(Insets i) { + private static boolean isNull(Insets i) { return (i == null) || ((i.left | i.top | i.right | i.bottom) == 0); } - Insets copy(Insets i) { + + private static Insets copy(Insets i) { return new Insets(i.top, i.left, i.bottom, i.right); } + // insets which we get from WM (e.g from _NET_FRAME_EXTENTS) + private Insets wm_set_insets; + + private Insets getWMSetInsets(XAtom changedAtom) { + if (isEmbedded()) { + return null; + } + + if (wm_set_insets != null) { + return wm_set_insets; + } + + if (changedAtom == null) { + wm_set_insets = XWM.getInsetsFromExtents(getWindow()); + } else { + wm_set_insets = XWM.getInsetsFromProp(getWindow(), changedAtom); + } + + insLog.log(Level.FINER, "FRAME_EXTENTS: {0}", new Object[]{wm_set_insets}); + + if (wm_set_insets != null) { + wm_set_insets = copy(wm_set_insets); + } + return wm_set_insets; + } + + private void resetWMSetInsets() { + wm_set_insets = null; + } + + public void handlePropertyNotify(XEvent xev) { + super.handlePropertyNotify(xev); + + XPropertyEvent ev = xev.get_xproperty(); + if (ev.get_atom() == XWM.XA_KDE_NET_WM_FRAME_STRUT.getAtom() + || ev.get_atom() == XWM.XA_NET_FRAME_EXTENTS.getAtom()) + { + getWMSetInsets(XAtom.get(ev.get_atom())); + } + } + long reparent_serial = 0; public void handleReparentNotifyEvent(XEvent xev) { @@ -337,34 +370,29 @@ abstract class XDecoratedPeer extends XWindowPeer { Insets correction = difference(correctWM, currentInsets); insLog.log(Level.FINEST, "Corrention {0}", new Object[] {correction}); if (!isNull(correction)) { - /* - * Actual insets account for menubar/warning label, - * so we can't assign directly but must adjust them. - */ - add(currentInsets, correction); + currentInsets = copy(correctWM); applyGuessedInsets(); //Fix for 6318109: PIT: Min Size is not honored properly when a //smaller size is specified in setSize(), XToolkit //update minimum size hints updateMinSizeHints(); - - /* - * If this window has been sized by a pack() we need - * to keep the interior geometry intact. Since pack() - * computed width and height with wrong insets, we - * must adjust the target dimensions appropriately. - */ } if (insLog.isLoggable(Level.FINER)) insLog.finer("Dimensions before reparent: " + dimensions); dimensions.setInsets(getRealInsets()); insets_corrected = true; - if (isMaximized()) { + if (isMaximized() || isNull(correction)) { return; } + /* + * If this window has been sized by a pack() we need + * to keep the interior geometry intact. Since pack() + * computed width and height with wrong insets, we + * must adjust the target dimensions appropriately. + */ if ((getHints().get_flags() & (XUtilConstants.USPosition | XUtilConstants.PPosition)) != 0) { reshape(dimensions, SET_BOUNDS, false); } else { @@ -384,10 +412,10 @@ abstract class XDecoratedPeer extends XWindowPeer { protected Insets guessInsets() { - if (isEmbedded()) { + if (isEmbedded() || isTargetUndecorated()) { return new Insets(0, 0, 0, 0); } else { - if (currentInsets.top > 0) { + if (!isNull(currentInsets)) { /* insets were set on wdata by System Properties */ return copy(currentInsets); } else { @@ -403,7 +431,6 @@ abstract class XDecoratedPeer extends XWindowPeer { private void applyGuessedInsets() { Insets guessed = guessInsets(); currentInsets = copy(guessed); - insets = copy(currentInsets); } public void revalidate() { @@ -416,16 +443,18 @@ abstract class XDecoratedPeer extends XWindowPeer { } Insets getRealInsets() { - if (isNull(insets)) { + if (isNull(currentInsets)) { applyGuessedInsets(); } - return insets; + return currentInsets; } public Insets getInsets() { Insets in = copy(getRealInsets()); in.top += getMenuBarHeight() + getWarningWindowHeight(); - if (insLog.isLoggable(Level.FINEST)) insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in}); + if (insLog.isLoggable(Level.FINEST)) { + insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in}); + } return in; } @@ -835,7 +864,7 @@ abstract class XDecoratedPeer extends XWindowPeer { public void setResizable(boolean resizable) { int fs = winAttr.functions; if (!isResizable() && resizable) { - insets = currentInsets = new Insets(0, 0, 0, 0); + currentInsets = new Insets(0, 0, 0, 0); resetWMSetInsets(); if (!isEmbedded()) { setReparented(false); @@ -849,7 +878,7 @@ abstract class XDecoratedPeer extends XWindowPeer { winAttr.functions = fs; XWM.setShellResizable(this); } else if (isResizable() && !resizable) { - insets = currentInsets = new Insets(0, 0, 0, 0); + currentInsets = new Insets(0, 0, 0, 0); resetWMSetInsets(); if (!isEmbedded()) { setReparented(false); @@ -1004,10 +1033,6 @@ abstract class XDecoratedPeer extends XWindowPeer { } else if (cl.get_data(0) == wm_take_focus.getAtom()) { handleWmTakeFocus(cl); } - } else if (cl.get_message_type() == resize_request.getAtom()) { - reshape((int)cl.get_data(0), (int)cl.get_data(1), - (int)cl.get_data(2), (int)cl.get_data(3), - (int)cl.get_data(4), true); } } diff --git a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java index 2f81c9fe681..ef7bfdaa03c 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XDialogPeer.java @@ -80,14 +80,6 @@ class XDialogPeer extends XDecoratedPeer implements DialogPeer { super.setVisible(vis); } - protected Insets guessInsets() { - if (isTargetUndecorated()) { - return new Insets(0, 0, 0, 0); - } else { - return super.guessInsets(); - } - } - @Override boolean isTargetUndecorated() { if (undecorated != null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java index 9493b453feb..3820bf61013 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java @@ -87,14 +87,6 @@ class XFramePeer extends XDecoratedPeer implements FramePeer { setupState(true); } - protected Insets guessInsets() { - if (isTargetUndecorated()) { - return new Insets(0, 0, 0, 0); - } else { - return super.guessInsets(); - } - } - @Override boolean isTargetUndecorated() { if (undecorated != null) { diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java index fe8fd7c6fc7..17d76b0de24 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java @@ -65,7 +65,6 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, static XAtom wm_delete_window; static XAtom wm_take_focus; - Insets insets = new Insets( 0, 0, 0, 0 ); XWindowAttributesData winAttr; private boolean cachedFocusableWindow; XWarningWindow warningWindow; @@ -139,7 +138,6 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE"); winAttr = new XWindowAttributesData(); - insets = new Insets(0,0,0,0); params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect())); @@ -260,7 +258,6 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, setSaveUnder(true); - XWM.requestWMExtents(getWindow()); updateIconImages(); } @@ -541,9 +538,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, } public Insets getInsets() { - Insets in = (Insets)(insets.clone()); - in.top += getWarningWindowHeight(); - return in; + return new Insets(getWarningWindowHeight(), 0, 0, 0); } // NOTE: This method may be called by privileged threads. @@ -1002,7 +997,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, return ret; } - private boolean isDesktopWindow( long wi ) { + + private static boolean isDesktopWindow( long wi ) { return XWM.getWM().isDesktopWindow( wi ); } @@ -1176,10 +1172,6 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, // State has changed, invalidate saved value stateChanged = true; stateChanged(ev.get_time(), savedState, getWMState()); - } else if (ev.get_atom() == XWM.XA_KDE_NET_WM_FRAME_STRUT.getAtom() - || ev.get_atom() == XWM.XA_NET_FRAME_EXTENTS.getAtom()) - { - getWMSetInsets(XAtom.get(ev.get_atom())); } } @@ -1887,37 +1879,6 @@ class XWindowPeer extends XPanelPeer implements WindowPeer, } } - private Insets wm_set_insets; - public Insets getWMSetInsets(XAtom changedAtom) { - if (isEmbedded()) { - return null; - } - - if (wm_set_insets != null) { - return wm_set_insets; - } - - if (changedAtom == null) { - wm_set_insets = XWM.getInsetsFromExtents(getWindow()); - } else { - wm_set_insets = XWM.getInsetsFromProp(getWindow(), changedAtom); - } - - insLog.log(Level.FINER, "FRAME_EXTENTS: {0}", new Object[]{wm_set_insets}); - - if (wm_set_insets != null) { - handleWMSetInsets(wm_set_insets); - } - return wm_set_insets; - } - - protected void handleWMSetInsets(Insets newInsets) { - wm_set_insets = (Insets)newInsets.clone(); - } - - public void resetWMSetInsets() { - wm_set_insets = null; - } protected synchronized void updateDropTarget() { if (dropTargetCount > 0) { long window = getWindow(); From 7cc4f58228f3990494d787ec76ea437d9651978f Mon Sep 17 00:00:00 2001 From: Mikhail Lapshin Date: Fri, 18 Apr 2008 18:21:02 +0400 Subject: [PATCH 31/46] 6675802: Regression: heavyweight popups cause SecurityExceptions in applets The problem code in Popup class is surrounded by AccessController.doPrivileged() Reviewed-by: alexp --- jdk/src/share/classes/javax/swing/Popup.java | 9 +++- .../swing/JPopupMenu/6675802/bug6675802.java | 43 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 jdk/test/javax/swing/JPopupMenu/6675802/bug6675802.java diff --git a/jdk/src/share/classes/javax/swing/Popup.java b/jdk/src/share/classes/javax/swing/Popup.java index 02ab116107b..b246b67f4de 100644 --- a/jdk/src/share/classes/javax/swing/Popup.java +++ b/jdk/src/share/classes/javax/swing/Popup.java @@ -229,7 +229,14 @@ public class Popup { // Popups are typically transient and most likely won't benefit // from true double buffering. Turn it off here. getRootPane().setUseTrueDoubleBuffering(false); - setAlwaysOnTop(true); + java.security.AccessController.doPrivileged( + new java.security.PrivilegedAction() { + public Object run() { + setAlwaysOnTop(true); + return null; + } + } + ); } public void update(Graphics g) { diff --git a/jdk/test/javax/swing/JPopupMenu/6675802/bug6675802.java b/jdk/test/javax/swing/JPopupMenu/6675802/bug6675802.java new file mode 100644 index 00000000000..4c6f6442a9f --- /dev/null +++ b/jdk/test/javax/swing/JPopupMenu/6675802/bug6675802.java @@ -0,0 +1,43 @@ +/* + * 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 6675802 + * @summary Checks that there is no AccessControlException when + * a heaviweight popup menu is shown from an applet. + * @author Mikhail Lapshin + * @run main bug6675802 + */ + +import javax.swing.*; + +public class bug6675802 { + public static void main(String[] args) { + System.setSecurityManager(new SecurityManager()); + final JPopupMenu popupMenu = new JPopupMenu(); + popupMenu.add(new JMenuItem("Click")); + popupMenu.show(null, 0, 0); + System.out.println("Test passed"); + } +} From 9145169200e15c5545172c91f04c9089a6e4495c Mon Sep 17 00:00:00 2001 From: Yuri Nesterenko Date: Wed, 23 Apr 2008 14:35:26 +0400 Subject: [PATCH 32/46] 6627324: Alt Graph doesnot generate any key event when pressing in German locale This Unix only problem solved by mapping XK_ISO_Level3_Shift keysym to Java keycode VK_ALT_GRAPH. Reviewed-by: son --- jdk/src/solaris/classes/sun/awt/X11/XKeysym.java | 3 ++- jdk/src/solaris/classes/sun/awt/X11/genhash.awk | 6 +++--- jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java b/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java index a3a97bb1a54..77e7ba98e22 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java @@ -1,7 +1,7 @@ // This is a generated file: do not edit! Edit keysym2ucs.h if necessary. /* - * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -1495,6 +1495,7 @@ public class XKeysym { keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Multi_key), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COMPOSE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Mode_switch), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT_GRAPH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); + keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_ISO_Level3_Shift), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT_GRAPH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); /* Editing block */ keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Redo), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AGAIN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); diff --git a/jdk/src/solaris/classes/sun/awt/X11/genhash.awk b/jdk/src/solaris/classes/sun/awt/X11/genhash.awk index 510d234e534..1fd75cffebf 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/genhash.awk +++ b/jdk/src/solaris/classes/sun/awt/X11/genhash.awk @@ -1,4 +1,4 @@ -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. +# 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 @@ -38,8 +38,8 @@ BEGIN { FS=";"; if( $1 != "0x0000" ) { ndx = toupper($1); sub(/0X/, "", ndx); - printf(" keysym2UCSHash.put( (long)%s, (char)%s); // %s --> %s \n", - $4, $1, $3, unic[ndx]); + printf(" keysym2UCSHash.put( (long)%s, (char)%s); // %s -->%s\n", + $4, $1, $3, (unic[ndx]=="" ? "" : " " unic[ndx])); } } /tojava/ { sub(/tojava /, ""); sub(/tojava$/, ""); print} diff --git a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h index a522e6be015..c7a4b0d72c7 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h +++ b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-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 @@ -39,7 +39,7 @@ */ tojava /* -tojava * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. +tojava * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. tojava * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. tojava * tojava * This code is free software; you can redistribute it and/or modify it @@ -2546,6 +2546,7 @@ tojava */ tojava tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Multi_key), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_COMPOSE, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Mode_switch), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT_GRAPH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); +tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_ISO_Level3_Shift), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_ALT_GRAPH, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); tojava tojava /* Editing block */ tojava keysym2JavaKeycodeHash.put( Long.valueOf(XKeySymConstants.XK_Redo), new Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_AGAIN, java.awt.event.KeyEvent.KEY_LOCATION_STANDARD)); From 8dff6c648be296799e4a7e0e1964d339acc0d724 Mon Sep 17 00:00:00 2001 From: Mikhail Lapshin Date: Wed, 23 Apr 2008 18:06:34 +0400 Subject: [PATCH 33/46] 6691503: Malicious applet can show always-on-top popup menu which has whole screen size The fix for 6675802 is replaced by a try-catch clause that catches SequrityExceptions for applets. Reviewed-by: alexp --- jdk/src/share/classes/javax/swing/Popup.java | 17 +-- .../swing/JPopupMenu/6691503/bug6691503.java | 113 ++++++++++++++++++ 2 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java diff --git a/jdk/src/share/classes/javax/swing/Popup.java b/jdk/src/share/classes/javax/swing/Popup.java index b246b67f4de..a6373f87b16 100644 --- a/jdk/src/share/classes/javax/swing/Popup.java +++ b/jdk/src/share/classes/javax/swing/Popup.java @@ -229,14 +229,15 @@ public class Popup { // Popups are typically transient and most likely won't benefit // from true double buffering. Turn it off here. getRootPane().setUseTrueDoubleBuffering(false); - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { - setAlwaysOnTop(true); - return null; - } - } - ); + // Try to set "always-on-top" for the popup window. + // Applets usually don't have sufficient permissions to do it. + // In this case simply ignore the exception. + try { + setAlwaysOnTop(true); + } catch (SecurityException se) { + // setAlwaysOnTop is restricted, + // the exception is ignored + } } public void update(Graphics g) { diff --git a/jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java b/jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java new file mode 100644 index 00000000000..a044ac3b62e --- /dev/null +++ b/jdk/test/javax/swing/JPopupMenu/6691503/bug6691503.java @@ -0,0 +1,113 @@ +/* + * 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 6691503 + * @summary Checks that there is no opportunity for a malicious applet + * to show a popup menu which has whole screen size. + * a heaviweight popup menu is shown from an applet. + * @author Mikhail Lapshin + * @run main bug6691503 + */ + +import sun.awt.SunToolkit; + +import javax.swing.*; +import java.awt.*; + +public class bug6691503 { + private JPopupMenu popupMenu; + private JFrame frame; + private boolean isAlwaysOnTop1 = false; + private boolean isAlwaysOnTop2 = true; + + public static void main(String[] args) { + bug6691503 test = new bug6691503(); + test.setupUI(); + test.testApplication(); + test.testApplet(); + test.checkResult(); + test.stopEDT(); + } + + private void setupUI() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame = new JFrame(); + frame.setVisible(true); + popupMenu = new JPopupMenu(); + JMenuItem click = new JMenuItem("Click"); + popupMenu.add(click); + } + }); + } + + private void testApplication() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + popupMenu.show(frame, 0, 0); + Window popupWindow = (Window) + (popupMenu.getParent().getParent().getParent().getParent()); + isAlwaysOnTop1 = popupWindow.isAlwaysOnTop(); + System.out.println( + "Application: popupWindow.isAlwaysOnTop() = " + isAlwaysOnTop1); + popupMenu.setVisible(false); + } + }); + } + + private void testApplet() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + System.setSecurityManager(new SecurityManager()); + popupMenu.show(frame, 0, 0); + Window popupWindow = (Window) + (popupMenu.getParent().getParent().getParent().getParent()); + isAlwaysOnTop2 = popupWindow.isAlwaysOnTop(); + System.out.println( + "Applet: popupWindow.isAlwaysOnTop() = " + isAlwaysOnTop2); + popupMenu.setVisible(false); + } + }); + } + + private void checkResult() { + ((SunToolkit)(Toolkit.getDefaultToolkit())).realSync(); + if (!isAlwaysOnTop1 || isAlwaysOnTop2) { + throw new RuntimeException("Malicious applet can show always-on-top " + + "popup menu which has whole screen size"); + } + System.out.println("Test passed"); + } + + private void stopEDT() { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + frame.dispose(); + } + }); + } +} + + From 9d90ce578172e20b4bbf19ad3bb82c201499a939 Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Mon, 28 Apr 2008 17:17:45 +0400 Subject: [PATCH 34/46] 4252173: Inability to reuse the HorizontalSliderThumbIcon Removed casting component to JSlider from MetalIconFactory Reviewed-by: alexp --- .../swing/plaf/metal/MetalIconFactory.java | 34 +++++------ .../JFileChooser/4252173/bug4252173.java | 58 +++++++++++++++++++ 2 files changed, 73 insertions(+), 19 deletions(-) create mode 100644 jdk/test/javax/swing/JFileChooser/4252173/bug4252173.java diff --git a/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java b/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java index 61949c7cf43..72c2230d1e2 100644 --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalIconFactory.java @@ -2278,18 +2278,16 @@ private static class VerticalSliderThumbIcon implements Icon, Serializable, UIRe } public void paintIcon( Component c, Graphics g, int x, int y ) { - JSlider slider = (JSlider)c; - - boolean leftToRight = MetalUtils.isLeftToRight(slider); + boolean leftToRight = MetalUtils.isLeftToRight(c); g.translate( x, y ); // Draw the frame - if ( slider.hasFocus() ) { + if ( c.hasFocus() ) { g.setColor( MetalLookAndFeel.getPrimaryControlInfo() ); } else { - g.setColor( slider.isEnabled() ? MetalLookAndFeel.getPrimaryControlInfo() : + g.setColor( c.isEnabled() ? MetalLookAndFeel.getPrimaryControlInfo() : MetalLookAndFeel.getControlDarkShadow() ); } @@ -2309,7 +2307,7 @@ private static class VerticalSliderThumbIcon implements Icon, Serializable, UIRe } // Fill in the background - if ( slider.hasFocus() ) { + if ( c.hasFocus() ) { g.setColor( c.getForeground() ); } else { @@ -2338,8 +2336,8 @@ private static class VerticalSliderThumbIcon implements Icon, Serializable, UIRe // Draw the bumps int offset = (leftToRight) ? 2 : 8; - if ( slider.isEnabled() ) { - if ( slider.hasFocus() ) { + if ( c.isEnabled() ) { + if ( c.hasFocus() ) { primaryBumps.paintIcon( c, g, offset, 2 ); } else { @@ -2348,8 +2346,8 @@ private static class VerticalSliderThumbIcon implements Icon, Serializable, UIRe } // Draw the highlight - if ( slider.isEnabled() ) { - g.setColor( slider.hasFocus() ? MetalLookAndFeel.getPrimaryControl() + if ( c.isEnabled() ) { + g.setColor( c.hasFocus() ? MetalLookAndFeel.getPrimaryControl() : MetalLookAndFeel.getControlHighlight() ); if (leftToRight) { g.drawLine( 1, 1, 8, 1 ); @@ -2389,16 +2387,14 @@ private static class HorizontalSliderThumbIcon implements Icon, Serializable, UI } public void paintIcon( Component c, Graphics g, int x, int y ) { - JSlider slider = (JSlider)c; - g.translate( x, y ); // Draw the frame - if ( slider.hasFocus() ) { + if ( c.hasFocus() ) { g.setColor( MetalLookAndFeel.getPrimaryControlInfo() ); } else { - g.setColor( slider.isEnabled() ? MetalLookAndFeel.getPrimaryControlInfo() : + g.setColor( c.isEnabled() ? MetalLookAndFeel.getPrimaryControlInfo() : MetalLookAndFeel.getControlDarkShadow() ); } @@ -2409,7 +2405,7 @@ private static class HorizontalSliderThumbIcon implements Icon, Serializable, UI g.drawLine( 7,15 , 14,8 ); // right slant // Fill in the background - if ( slider.hasFocus() ) { + if ( c.hasFocus() ) { g.setColor( c.getForeground() ); } else { @@ -2425,8 +2421,8 @@ private static class HorizontalSliderThumbIcon implements Icon, Serializable, UI g.drawLine( 7,14 , 7,14 ); // Draw the bumps - if ( slider.isEnabled() ) { - if ( slider.hasFocus() ) { + if ( c.isEnabled() ) { + if ( c.hasFocus() ) { primaryBumps.paintIcon( c, g, 2, 2 ); } else { @@ -2435,8 +2431,8 @@ private static class HorizontalSliderThumbIcon implements Icon, Serializable, UI } // Draw the highlight - if ( slider.isEnabled() ) { - g.setColor( slider.hasFocus() ? MetalLookAndFeel.getPrimaryControl() + if ( c.isEnabled() ) { + g.setColor( c.hasFocus() ? MetalLookAndFeel.getPrimaryControl() : MetalLookAndFeel.getControlHighlight() ); g.drawLine( 1, 1, 13, 1 ); g.drawLine( 1, 1, 1, 8 ); diff --git a/jdk/test/javax/swing/JFileChooser/4252173/bug4252173.java b/jdk/test/javax/swing/JFileChooser/4252173/bug4252173.java new file mode 100644 index 00000000000..ba9db820451 --- /dev/null +++ b/jdk/test/javax/swing/JFileChooser/4252173/bug4252173.java @@ -0,0 +1,58 @@ +/* + * 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 4252173 + @summary Inability to reuse the HorizontalSliderThumbIcon + @author Pavel Porvatov + @run main bug4252173 +*/ + +import javax.swing.*; +import javax.swing.plaf.metal.DefaultMetalTheme; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.lang.reflect.InvocationTargetException; + +public class bug4252173 { + public static void main(String[] args) throws InvocationTargetException, InterruptedException { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme()); + + JComponent component = new JLabel(); + + Icon horizontalThumbIcon = UIManager.getIcon("Slider.horizontalThumbIcon"); + + Icon verticalThumbIcon = UIManager.getIcon("Slider.verticalThumbIcon"); + + Graphics g = new BufferedImage(100, 100, BufferedImage.TYPE_4BYTE_ABGR).getGraphics(); + + horizontalThumbIcon.paintIcon(component, g, 0, 0); + + verticalThumbIcon.paintIcon(component, g, 0, 0); + } + }); + } +} From c091ee49da410d210d022f603c2d9b169230163a Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Tue, 29 Apr 2008 13:49:13 +0400 Subject: [PATCH 35/46] 6210674: FileChooser fails to load custom harddrive icon and gets NullPointerException WindowsPlacesBar should use default icon for folders that doesn't have own icon Reviewed-by: loneid --- jdk/src/share/classes/sun/swing/WindowsPlacesBar.java | 11 +++++++++-- .../classes/sun/awt/shell/Win32ShellFolder2.java | 8 +++++--- .../sun/awt/shell/Win32ShellFolderManager2.java | 9 ++++----- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java index 0e3c868ef98..6feea39c10d 100644 --- a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java +++ b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java @@ -93,11 +93,18 @@ public class WindowsPlacesBar extends JToolBar if (index >= 0 && index < folderName.length() - 1) { folderName = folderName.substring(index + 1); } - Icon icon = null; + Icon icon; if (files[i] instanceof ShellFolder) { // We want a large icon, fsv only gives us a small. ShellFolder sf = (ShellFolder)files[i]; - icon = new ImageIcon(sf.getIcon(true), sf.getFolderType()); + Image image = sf.getIcon(true); + + if (image == null) { + // Get default image + image = (Image) ShellFolder.get("shell32LargeIcon 1"); + } + + icon = image == null ? null : new ImageIcon(image, sf.getFolderType()); } else { icon = fsv.getSystemIcon(files[i]); } diff --git a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java index 5f3df8dbf94..74aecd4437f 100644 --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java @@ -910,18 +910,20 @@ final class Win32ShellFolder2 extends ShellFolder { /** * Gets an icon from the Windows system icon list as an Image */ - static Image getShell32Icon(int iconID) { + static Image getShell32Icon(int iconID, boolean getLargeIcon) { boolean useVGAColors = true; // Will be ignored on XP and later + int size = getLargeIcon ? 32 : 16; + Toolkit toolkit = Toolkit.getDefaultToolkit(); String shellIconBPP = (String)toolkit.getDesktopProperty("win.icon.shellIconBPP"); if (shellIconBPP != null) { useVGAColors = shellIconBPP.equals("4"); } - long hIcon = getIconResource("shell32.dll", iconID, 16, 16, useVGAColors); + long hIcon = getIconResource("shell32.dll", iconID, size, size, useVGAColors); if (hIcon != 0) { - Image icon = makeIcon(hIcon, false); + Image icon = makeIcon(hIcon, getLargeIcon); disposeIcon(hIcon); return icon; } diff --git a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java index 9454b674f5e..ef3dfa6a46d 100644 --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java @@ -313,13 +313,12 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { return null; } return Win32ShellFolder2.getSystemIcon(iconType); - } else if (key.startsWith("shell32Icon ")) { - int i; - String name = key.substring(key.indexOf(" ")+1); + } else if (key.startsWith("shell32Icon ") || key.startsWith("shell32LargeIcon ")) { + String name = key.substring(key.indexOf(" ") + 1); try { - i = Integer.parseInt(name); + int i = Integer.parseInt(name); if (i >= 0) { - return Win32ShellFolder2.getShell32Icon(i); + return Win32ShellFolder2.getShell32Icon(i, key.startsWith("shell32LargeIcon ")); } } catch (NumberFormatException ex) { } From f5ac15812cd05c770e925077130af55596546863 Mon Sep 17 00:00:00 2001 From: Florian Brunner Date: Tue, 29 Apr 2008 15:47:17 +0400 Subject: [PATCH 36/46] 6693507: There are unnecessary compilation warnings in the com.sun.java.swing.plaf.motif package Removed unnecessary castings and other warnings Reviewed-by: peterz --- .../java/swing/plaf/motif/MotifGraphicsUtils.java | 8 ++++---- .../plaf/motif/MotifInternalFrameTitlePane.java | 14 +++++++------- .../java/swing/plaf/motif/MotifLookAndFeel.java | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java index d6783e7375d..31425407792 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java @@ -225,15 +225,15 @@ public class MotifGraphicsUtils implements SwingConstants if(b.getIcon() != null) { Icon icon; if(!model.isEnabled()) { - icon = (Icon) b.getDisabledIcon(); + icon = b.getDisabledIcon(); } else if(model.isPressed() && model.isArmed()) { - icon = (Icon) b.getPressedIcon(); + icon = b.getPressedIcon(); if(icon == null) { // Use default icon - icon = (Icon) b.getIcon(); + icon = b.getIcon(); } } else { - icon = (Icon) b.getIcon(); + icon = b.getIcon(); } if (icon!=null) { diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java index 251555a592f..737a36d2eb5 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java @@ -86,18 +86,18 @@ public class MotifInternalFrameTitlePane protected void assembleSystemMenu() { systemMenu = new JPopupMenu(); - JMenuItem mi = (JMenuItem)systemMenu.add(new JMenuItem(restoreAction)); + JMenuItem mi = systemMenu.add(new JMenuItem(restoreAction)); mi.setMnemonic('R'); - mi = (JMenuItem) systemMenu.add(new JMenuItem(moveAction)); + mi = systemMenu.add(new JMenuItem(moveAction)); mi.setMnemonic('M'); - mi = (JMenuItem) systemMenu.add(new JMenuItem(sizeAction)); + mi = systemMenu.add(new JMenuItem(sizeAction)); mi.setMnemonic('S'); - mi = (JMenuItem) systemMenu.add(new JMenuItem(iconifyAction)); + mi = systemMenu.add(new JMenuItem(iconifyAction)); mi.setMnemonic('n'); - mi = (JMenuItem) systemMenu.add(new JMenuItem(maximizeAction)); + mi = systemMenu.add(new JMenuItem(maximizeAction)); mi.setMnemonic('x'); systemMenu.add(new JSeparator()); - mi = (JMenuItem) systemMenu.add(new JMenuItem(closeAction)); + mi = systemMenu.add(new JMenuItem(closeAction)); mi.setMnemonic('C'); systemButton = new SystemButton(); @@ -157,7 +157,7 @@ public class MotifInternalFrameTitlePane } public void propertyChange(PropertyChangeEvent evt) { - String prop = (String)evt.getPropertyName(); + String prop = evt.getPropertyName(); JInternalFrame f = (JInternalFrame)evt.getSource(); boolean value = false; if (JInternalFrame.IS_SELECTED_PROPERTY.equals(prop)) { diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java index 63994ff6732..fb12c25644f 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java @@ -290,7 +290,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel Object unselectedTabBackground = new UIDefaults.LazyValue() { public Object createValue(UIDefaults table) { - Color c = (Color)table.getColor("control"); + Color c = table.getColor("control"); return new ColorUIResource(Math.max((int)(c.getRed()*.85),0), Math.max((int)(c.getGreen()*.85),0), Math.max((int)(c.getBlue()*.85),0)); @@ -299,7 +299,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel Object unselectedTabForeground = new UIDefaults.LazyValue() { public Object createValue(UIDefaults table) { - Color c = (Color)table.getColor("controlText"); + Color c = table.getColor("controlText"); return new ColorUIResource(Math.max((int)(c.getRed()*.85),0), Math.max((int)(c.getGreen()*.85),0), Math.max((int)(c.getBlue()*.85),0)); @@ -308,7 +308,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel Object unselectedTabShadow = new UIDefaults.LazyValue() { public Object createValue(UIDefaults table) { - Color c = (Color)table.getColor("control"); + Color c = table.getColor("control"); Color base = new Color(Math.max((int)(c.getRed()*.85),0), Math.max((int)(c.getGreen()*.85),0), Math.max((int)(c.getBlue()*.85),0)); @@ -318,7 +318,7 @@ public class MotifLookAndFeel extends BasicLookAndFeel Object unselectedTabHighlight = new UIDefaults.LazyValue() { public Object createValue(UIDefaults table) { - Color c = (Color)table.getColor("control"); + Color c = table.getColor("control"); Color base = new Color(Math.max((int)(c.getRed()*.85),0), Math.max((int)(c.getGreen()*.85),0), Math.max((int)(c.getBlue()*.85),0)); From f149163508f5af0eda1256b80eae635d2a5707a5 Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Tue, 29 Apr 2008 17:48:01 +0400 Subject: [PATCH 37/46] 6614972: JSlider value should not change on right-click WindowsSliderUI won't use the right mouse button for change slider position Reviewed-by: alexp --- .../com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java | 2 +- .../javax/swing/plaf/basic/BasicLookAndFeel.java | 1 + .../classes/javax/swing/plaf/basic/BasicSliderUI.java | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java index b4f435798a1..31077b14ff8 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java @@ -982,7 +982,7 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "LEFT", "positiveUnitIncrement", "KP_LEFT", "positiveUnitIncrement", }), - + "Slider.onlyLeftMouseButtonDrag", Boolean.FALSE, "Spinner.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java index 77f46be88c1..f051b806359 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java @@ -1364,6 +1364,7 @@ public abstract class BasicLookAndFeel extends LookAndFeel implements Serializab "LEFT", "positiveUnitIncrement", "KP_LEFT", "positiveUnitIncrement", }), + "Slider.onlyLeftMouseButtonDrag", Boolean.TRUE, // *** Spinner "Spinner.font", monospacedPlain12, diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java index 70f5cba3b83..3203df334f0 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java @@ -1573,6 +1573,11 @@ public class BasicSliderUI extends SliderUI{ // Clicked in the Thumb area? if (thumbRect.contains(currentMouseX, currentMouseY)) { + if (UIManager.getBoolean("Slider.onlyLeftMouseButtonDrag") + && !SwingUtilities.isLeftMouseButton(e)) { + return; + } + switch (slider.getOrientation()) { case JSlider.VERTICAL: offset = currentMouseY - thumbRect.y; @@ -1584,6 +1589,11 @@ public class BasicSliderUI extends SliderUI{ isDragging = true; return; } + + if (!SwingUtilities.isLeftMouseButton(e)) { + return; + } + isDragging = false; slider.setValueIsAdjusting(true); From f09d6c6ac3917ab2644218190d79b3144a3aa2ac Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Wed, 30 Apr 2008 12:32:05 +0400 Subject: [PATCH 38/46] 6524424: JSlider Clicking In Tracks Behavior Inconsistent For Different Tick Spacings JSlider should use minimal tick space in SnapToTicks mode Reviewed-by: peterz --- .../javax/swing/plaf/basic/BasicSliderUI.java | 52 ++++++---- .../JFileChooser/6524424/bug6524424.html | 11 +++ .../JFileChooser/6524424/bug6524424.java | 99 +++++++++++++++++++ 3 files changed, 143 insertions(+), 19 deletions(-) create mode 100644 jdk/test/javax/swing/JFileChooser/6524424/bug6524424.html create mode 100644 jdk/test/javax/swing/JFileChooser/6524424/bug6524424.java diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java index 3203df334f0..c1aada74441 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java @@ -552,20 +552,28 @@ public class BasicSliderUI extends SliderUI{ contentRect.height = focusRect.height - (focusInsets.top + focusInsets.bottom); } + private int getTickSpacing() { + int majorTickSpacing = slider.getMajorTickSpacing(); + int minorTickSpacing = slider.getMinorTickSpacing(); + + int result; + + if (minorTickSpacing > 0) { + result = minorTickSpacing; + } else if (majorTickSpacing > 0) { + result = majorTickSpacing; + } else { + result = 0; + } + + return result; + } + protected void calculateThumbLocation() { if ( slider.getSnapToTicks() ) { int sliderValue = slider.getValue(); int snappedValue = sliderValue; - int majorTickSpacing = slider.getMajorTickSpacing(); - int minorTickSpacing = slider.getMinorTickSpacing(); - int tickSpacing = 0; - - if ( minorTickSpacing > 0 ) { - tickSpacing = minorTickSpacing; - } - else if ( majorTickSpacing > 0 ) { - tickSpacing = majorTickSpacing; - } + int tickSpacing = getTickSpacing(); if ( tickSpacing != 0 ) { // If it's not on a tick, change the value @@ -1273,28 +1281,34 @@ public class BasicSliderUI extends SliderUI{ public void scrollByBlock(int direction) { synchronized(slider) { - - int oldValue = slider.getValue(); int blockIncrement = (slider.getMaximum() - slider.getMinimum()) / 10; - if (blockIncrement <= 0 && - slider.getMaximum() > slider.getMinimum()) { - + if (blockIncrement == 0) { blockIncrement = 1; } + if (slider.getSnapToTicks()) { + int tickSpacing = getTickSpacing(); + + if (blockIncrement < tickSpacing) { + blockIncrement = tickSpacing; + } + } + int delta = blockIncrement * ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL); - slider.setValue(oldValue + delta); + slider.setValue(slider.getValue() + delta); } } public void scrollByUnit(int direction) { synchronized(slider) { + int delta = ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL); - int oldValue = slider.getValue(); - int delta = 1 * ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL); + if (slider.getSnapToTicks()) { + delta *= getTickSpacing(); + } - slider.setValue(oldValue + delta); + slider.setValue(slider.getValue() + delta); } } diff --git a/jdk/test/javax/swing/JFileChooser/6524424/bug6524424.html b/jdk/test/javax/swing/JFileChooser/6524424/bug6524424.html new file mode 100644 index 00000000000..ecf8f65df04 --- /dev/null +++ b/jdk/test/javax/swing/JFileChooser/6524424/bug6524424.html @@ -0,0 +1,11 @@ + + + +To test fix follow the next steps: +1. Select a slider (do the next steps for every slider) +2. Check that the next keyboard buttons work correctly: + Up, Down, Left, Right, Page Up, Page Down +3. Press left mouse button on a free space of the slider and check + that thumb moves correctly + + diff --git a/jdk/test/javax/swing/JFileChooser/6524424/bug6524424.java b/jdk/test/javax/swing/JFileChooser/6524424/bug6524424.java new file mode 100644 index 00000000000..3952580c84e --- /dev/null +++ b/jdk/test/javax/swing/JFileChooser/6524424/bug6524424.java @@ -0,0 +1,99 @@ +/* + * 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 6524424 + * @summary JSlider Clicking In Tracks Behavior Inconsistent For Different Tick Spacings + * @author Pavel Porvatov + * @run applet/manual=done bug6524424.html + */ + +import java.awt.*; +import javax.swing.*; + +import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; + +public class bug6524424 extends JApplet { + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(new WindowsLookAndFeel()); + } catch (UnsupportedLookAndFeelException e) { + e.printStackTrace(); + + return; + } + + TestPanel panel = new TestPanel(); + + JFrame frame = new JFrame(); + + frame.setContentPane(panel); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.pack(); + frame.setLocationRelativeTo(null); + + frame.setVisible(true); + } + + public void init() { + TestPanel panel = new TestPanel(); + + setContentPane(panel); + } + + private static class TestPanel extends JPanel { + + private TestPanel() { + super(new GridBagLayout()); + + JSlider slider1 = createSlider(1, 2); + JSlider slider2 = createSlider(2, 4); + JSlider slider3 = createSlider(3, 6); + + addComponent(this, slider1); + addComponent(this, slider2); + addComponent(this, slider3); + } + + private JSlider createSlider(int tickMinor, int tickMajor) { + JSlider result = new JSlider(); + + result.setPaintLabels(true); + result.setPaintTicks(true); + result.setSnapToTicks(true); + result.setMinimum(0); + result.setMaximum(12); + result.setMinorTickSpacing(tickMinor); + result.setMajorTickSpacing(tickMajor); + + return result; + } + } + + private static void addComponent(JPanel panel, Component component) { + panel.add(component, new GridBagConstraints(0, + panel.getComponentCount(), 1, 1, + 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, + new Insets(0, 0, 0, 0), 0, 0)); + } +} From 4594b0f8ea8feea1caaf6205b6d7e042dd27c9e2 Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Wed, 30 Apr 2008 13:01:01 +0400 Subject: [PATCH 39/46] 6642612: JFileChooser approve buttons should use Open and Save text (GTK) In FileChooser under GTK LaF "Ok" and "Cancel" buttons were made with the same size Reviewed-by: peterz --- .../java/swing/plaf/gtk/GTKFileChooserUI.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java index d338c08d6fd..a640862c50c 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java @@ -97,14 +97,11 @@ class GTKFileChooserUI extends SynthFileChooserUI { private static final Dimension hstrut3 = new Dimension(3, 1); private static final Dimension vstrut10 = new Dimension(1, 10); - private static final Insets insets = new Insets(10, 10, 10, 10); - private static Dimension prefListSize = new Dimension(75, 150); private static Dimension PREF_SIZE = new Dimension(435, 360); private static Dimension MIN_SIZE = new Dimension(200, 300); - private static Dimension PREF_ACC_SIZE = new Dimension(10, 10); private static Dimension ZERO_ACC_SIZE = new Dimension(1, 1); private static Dimension MAX_SIZE = new Dimension(Short.MAX_VALUE, Short.MAX_VALUE); @@ -125,7 +122,6 @@ class GTKFileChooserUI extends SynthFileChooserUI { private JPanel bottomButtonPanel; private GTKDirectoryModel model = null; private Action newFolderAction; - private JPanel interior; private boolean readOnly; private boolean showDirectoryIcons; private boolean showFileIcons; @@ -710,15 +706,19 @@ class GTKFileChooserUI extends SynthFileChooserUI { bottomButtonPanel.setName("GTKFileChooser.bottomButtonPanel"); align(bottomButtonPanel); + JPanel pnButtons = new JPanel(new GridLayout(1, 2, 5, 0)); + JButton cancelButton = getCancelButton(fc); align(cancelButton); cancelButton.setMargin(buttonMargin); - bottomButtonPanel.add(cancelButton); + pnButtons.add(cancelButton); - JButton approveButton = getApproveButton(fc);; + JButton approveButton = getApproveButton(fc); align(approveButton); approveButton.setMargin(buttonMargin); - bottomButtonPanel.add(approveButton); + pnButtons.add(approveButton); + + bottomButtonPanel.add(pnButtons); if (fc.getControlButtonsAreShown()) { fc.add(bottomButtonPanel, BorderLayout.SOUTH); @@ -1108,7 +1108,7 @@ class GTKFileChooserUI extends SynthFileChooserUI { // Get the canonical (full) path. This has the side // benefit of removing extraneous chars from the path, // for example /foo/bar/ becomes /foo/bar - File canonical = null; + File canonical; try { canonical = fsv.createFileObject(ShellFolder.getNormalizedFile(directory).getPath()); } catch (IOException e) { From 92019e467c036b4606d14ce0264613b866fda4fd Mon Sep 17 00:00:00 2001 From: Mikhail Lapshin Date: Wed, 30 Apr 2008 13:19:26 +0400 Subject: [PATCH 40/46] 6690791: Even more ClassCasetException with TrayIcon Event.getComponent() is used unstead of (Component)event.getSource() Reviewed-by: peterz --- .../javax/swing/MenuSelectionManager.java | 8 ++-- .../swing/JPopupMenu/6690791/bug6690791.java | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 jdk/test/javax/swing/JPopupMenu/6690791/bug6690791.java diff --git a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java index 1070f35983c..aec83c9ab19 100644 --- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java +++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java @@ -218,9 +218,9 @@ public class MenuSelectionManager { int selectionSize; p = event.getPoint(); - Component source = (Component)event.getSource(); + Component source = event.getComponent(); - if (!source.isShowing()) { + if ((source != null) && !source.isShowing()) { // This can happen if a mouseReleased removes the // containing component -- bug 4146684 return; @@ -236,7 +236,9 @@ public class MenuSelectionManager { return; } - SwingUtilities.convertPointToScreen(p,source); + if (source != null) { + SwingUtilities.convertPointToScreen(p, source); + } screenX = p.x; screenY = p.y; diff --git a/jdk/test/javax/swing/JPopupMenu/6690791/bug6690791.java b/jdk/test/javax/swing/JPopupMenu/6690791/bug6690791.java new file mode 100644 index 00000000000..bfbf3c39e4e --- /dev/null +++ b/jdk/test/javax/swing/JPopupMenu/6690791/bug6690791.java @@ -0,0 +1,44 @@ +/* + * 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 6690791 + * @summary Checks that there is no ClassCastException + * in MenuSelectionManager.processMouseEvent() + * @author Mikhail Lapshin + * @run main bug6690791 + */ + +import javax.swing.*; +import java.awt.event.MouseEvent; + +public class bug6690791 { + public static void main(String[] args) throws Exception { + MouseEvent me = new MouseEvent(new JLabel(), MouseEvent.MOUSE_CLICKED, + System.currentTimeMillis(), MouseEvent.ALT_MASK, + 10, 10, 100, 100, 1, false, MouseEvent.BUTTON1); + me.setSource(new Object()); + MenuSelectionManager.defaultManager().processMouseEvent(me); + } +} From 12cef95d4036c49d2a14fae3ab2788ff6fcd1b90 Mon Sep 17 00:00:00 2001 From: Kelly O'Hair Date: Wed, 30 Apr 2008 17:34:41 -0700 Subject: [PATCH 41/46] 6695553: Cleanup GPLv2+SPL legal notices in hat sources Just correcting the legal notices on the HAT sources. Reviewed-by: alanb --- .../share/classes/com/sun/tools/hat/Main.java | 10 +--------- .../share/classes/com/sun/tools/hat/build.xml | 12 +----------- .../model/AbstractJavaHeapObjectVisitor.java | 15 ++------------- .../tools/hat/internal/model/ArrayTypeCodes.java | 15 ++------------- .../tools/hat/internal/model/HackJavaValue.java | 15 ++------------- .../tools/hat/internal/model/JavaBoolean.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaByte.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaChar.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaClass.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaDouble.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaField.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaFloat.java | 15 ++------------- .../tools/hat/internal/model/JavaHeapObject.java | 15 ++------------- .../internal/model/JavaHeapObjectVisitor.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaInt.java | 15 ++------------- .../hat/internal/model/JavaLazyReadObject.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaLong.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaObject.java | 15 ++------------- .../hat/internal/model/JavaObjectArray.java | 15 ++------------- .../tools/hat/internal/model/JavaObjectRef.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaShort.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaStatic.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaThing.java | 15 ++------------- .../sun/tools/hat/internal/model/JavaValue.java | 15 ++------------- .../tools/hat/internal/model/JavaValueArray.java | 15 ++------------- .../hat/internal/model/ReachableExcludes.java | 15 ++------------- .../internal/model/ReachableExcludesImpl.java | 15 ++------------- .../hat/internal/model/ReachableObjects.java | 15 ++------------- .../tools/hat/internal/model/ReferenceChain.java | 15 ++------------- .../com/sun/tools/hat/internal/model/Root.java | 15 ++------------- .../sun/tools/hat/internal/model/Snapshot.java | 15 ++------------- .../sun/tools/hat/internal/model/StackFrame.java | 15 ++------------- .../sun/tools/hat/internal/model/StackTrace.java | 15 ++------------- .../sun/tools/hat/internal/oql/OQLEngine.java | 15 ++------------- .../sun/tools/hat/internal/oql/OQLException.java | 15 ++------------- .../com/sun/tools/hat/internal/oql/OQLQuery.java | 15 ++------------- .../tools/hat/internal/oql/ObjectVisitor.java | 15 ++------------- .../hat/internal/parser/FileReadBuffer.java | 15 ++------------- .../tools/hat/internal/parser/HprofReader.java | 16 +++------------- .../hat/internal/parser/MappedReadBuffer.java | 16 +++------------- .../internal/parser/PositionDataInputStream.java | 15 ++------------- .../hat/internal/parser/PositionInputStream.java | 15 ++------------- .../tools/hat/internal/parser/ReadBuffer.java | 15 ++------------- .../sun/tools/hat/internal/parser/Reader.java | 15 ++------------- .../hat/internal/server/AllClassesQuery.java | 15 ++------------- .../tools/hat/internal/server/AllRootsQuery.java | 15 ++------------- .../tools/hat/internal/server/ClassQuery.java | 15 ++------------- .../internal/server/FinalizerObjectsQuery.java | 15 ++------------- .../internal/server/FinalizerSummaryQuery.java | 15 ++------------- .../hat/internal/server/HistogramQuery.java | 15 ++------------- .../tools/hat/internal/server/HttpReader.java | 15 ++------------- .../hat/internal/server/InstancesCountQuery.java | 15 +++------------ .../hat/internal/server/InstancesQuery.java | 15 +++------------ .../sun/tools/hat/internal/server/OQLHelp.java | 15 ++------------- .../sun/tools/hat/internal/server/OQLQuery.java | 15 ++------------- .../tools/hat/internal/server/ObjectQuery.java | 15 +++------------ .../hat/internal/server/PlatformClasses.java | 15 +++------------ .../tools/hat/internal/server/QueryHandler.java | 16 +++------------- .../tools/hat/internal/server/QueryListener.java | 15 +++------------ .../hat/internal/server/ReachableQuery.java | 16 +++------------- .../hat/internal/server/RefsByTypeQuery.java | 15 ++------------- .../hat/internal/server/RootStackQuery.java | 15 +++------------ .../tools/hat/internal/server/RootsQuery.java | 15 +++------------ .../sun/tools/hat/internal/util/ArraySorter.java | 15 +++------------ .../sun/tools/hat/internal/util/Comparer.java | 15 +++------------ .../hat/internal/util/CompositeEnumeration.java | 15 ++------------- .../com/sun/tools/hat/internal/util/Misc.java | 15 +++------------ .../tools/hat/internal/util/VectorSorter.java | 15 +++------------ .../classes/com/sun/tools/hat/resources/hat.js | 14 +------------- 69 files changed, 150 insertions(+), 880 deletions(-) diff --git a/jdk/src/share/classes/com/sun/tools/hat/Main.java b/jdk/src/share/classes/com/sun/tools/hat/Main.java index 4aebdbe0d70..d027904bdd4 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/Main.java +++ b/jdk/src/share/classes/com/sun/tools/hat/Main.java @@ -23,18 +23,10 @@ * have any questions. */ - /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. + * at JavaSoft/Sun. */ package com.sun.tools.hat; diff --git a/jdk/src/share/classes/com/sun/tools/hat/build.xml b/jdk/src/share/classes/com/sun/tools/hat/build.xml index 655034d3c81..401cb77ae02 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/build.xml +++ b/jdk/src/share/classes/com/sun/tools/hat/build.xml @@ -27,19 +27,9 @@ diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java index d0e72c413e1..83a78cf9728 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/AbstractJavaHeapObjectVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ArrayTypeCodes.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ArrayTypeCodes.java index 2c3097474d3..fbcb72ffd17 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ArrayTypeCodes.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ArrayTypeCodes.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/HackJavaValue.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/HackJavaValue.java index 501cc128cca..fc807085218 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/HackJavaValue.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/HackJavaValue.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaBoolean.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaBoolean.java index 77eab286b15..f5de0d257c5 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaBoolean.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaBoolean.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaByte.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaByte.java index b19da339d0d..0b9ef2a1fae 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaByte.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaByte.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaChar.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaChar.java index dd7b8e35ec4..96cecbf4709 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaChar.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaChar.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaClass.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaClass.java index 6cdd45c6856..068de487982 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaClass.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaClass.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaDouble.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaDouble.java index 97985595541..414f6cab377 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaDouble.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaDouble.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaField.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaField.java index d92d12a6940..540309aec94 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaField.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaField.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaFloat.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaFloat.java index 4f8b589968c..cb0cb74cc7d 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaFloat.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaFloat.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObject.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObject.java index 35e0f151b97..0f3b7782815 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObject.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObject.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java index 0091dd88119..ef82cb2bcd7 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaHeapObjectVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaInt.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaInt.java index 076aa602e58..0e7f969cb6a 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaInt.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaInt.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLazyReadObject.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLazyReadObject.java index 7521723e9d6..0a9c6c25e27 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLazyReadObject.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLazyReadObject.java @@ -1,5 +1,5 @@ /* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLong.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLong.java index 9c71c4312d9..3654e592ecf 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLong.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaLong.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObject.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObject.java index 785945acad1..d78b794b00e 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObject.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObject.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectArray.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectArray.java index 52c403102a9..e9a67d9eb92 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectArray.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectArray.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectRef.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectRef.java index 30c4eef3e1c..d7271698c74 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectRef.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaObjectRef.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaShort.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaShort.java index 1d9bfa615fa..1d402eb3ab9 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaShort.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaShort.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaStatic.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaStatic.java index 8e6c1fe5a09..c84a43452b9 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaStatic.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaStatic.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaThing.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaThing.java index 9ac70c4136f..bfe7499af48 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaThing.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaThing.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValue.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValue.java index 8e694d24b65..2395660715d 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValue.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValue.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValueArray.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValueArray.java index 6da26096635..4f11161e95d 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValueArray.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/JavaValueArray.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludes.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludes.java index d2d711896d1..5dd4d2bc6e0 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludes.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludes.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java index 7bfbd9f8176..1f623243c7e 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableExcludesImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableObjects.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableObjects.java index d6fb869afba..d1749c56302 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableObjects.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReachableObjects.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReferenceChain.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReferenceChain.java index 9d8aeadcfcf..f682351d76d 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReferenceChain.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/ReferenceChain.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/Root.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/Root.java index c3197daa3db..1ec22b32ce0 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/Root.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/Root.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/Snapshot.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/Snapshot.java index f0097acc1a8..2000eee5bc5 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/Snapshot.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/Snapshot.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackFrame.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackFrame.java index 49ed6ea2f4d..1c7e8eacbab 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackFrame.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackFrame.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackTrace.java b/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackTrace.java index 94776d11e63..bf64209d054 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackTrace.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/model/StackTrace.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.model; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLEngine.java b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLEngine.java index 3d98369e859..14a8ca8cf1d 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLEngine.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLEngine.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.oql; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLException.java b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLException.java index 7ab179a680f..00c1cdc0b34 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLException.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLException.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.oql; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLQuery.java index e9fa71842e3..cd594c49133 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/OQLQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.oql; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/ObjectVisitor.java b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/ObjectVisitor.java index 21a795debc0..22a970ee722 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/oql/ObjectVisitor.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/oql/ObjectVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.oql; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/FileReadBuffer.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/FileReadBuffer.java index 654ad1eafbe..7d5f5f58cee 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/FileReadBuffer.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/FileReadBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/HprofReader.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/HprofReader.java index eceac9fdc05..7c7a4376ff0 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/HprofReader.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/HprofReader.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -23,21 +23,11 @@ * have any questions. */ + /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/MappedReadBuffer.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/MappedReadBuffer.java index 6540e55f687..a46a0bd5f5f 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/MappedReadBuffer.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/MappedReadBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -23,21 +23,11 @@ * have any questions. */ + /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionDataInputStream.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionDataInputStream.java index a2310404d0e..fe68a529ddf 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionDataInputStream.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionDataInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionInputStream.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionInputStream.java index 8554d237801..0c22fa0ece3 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionInputStream.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/PositionInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/ReadBuffer.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/ReadBuffer.java index 249c5360fc8..2980fbe4114 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/ReadBuffer.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/ReadBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/Reader.java b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/Reader.java index ea39c9cde0b..33fca3a1c5c 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/parser/Reader.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/parser/Reader.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.parser; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java index 917194e3816..14209503e7c 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllRootsQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllRootsQuery.java index 25cb2b6a023..794e9c2c9a6 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllRootsQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/AllRootsQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java index 4fc235f7e2a..bb5e9ae8f3e 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java index 9bf9f29a75b..e4b4f1c7c3c 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerObjectsQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java index cb1b11dc048..5fc4cc1e2e8 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/FinalizerSummaryQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/HistogramQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/HistogramQuery.java index a65a5740705..025850f8afb 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/HistogramQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/HistogramQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java index 5b33cea6d0d..fb92b632a1f 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java index 066ee659d33..624a2c3d268 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesQuery.java index f30e153a439..6be2630b1eb 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java index 1a5ed041e6c..f0a6cf11657 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java index 75bed2fdf49..e6c1dfbabd4 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/ObjectQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/ObjectQuery.java index 7748b0c97f7..30ab9c7cc94 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/ObjectQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/ObjectQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/PlatformClasses.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/PlatformClasses.java index 24db65e2fe7..9ba31757c50 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/PlatformClasses.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/PlatformClasses.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java index 80d208318ac..49729018e7c 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -24,20 +24,10 @@ */ - -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryListener.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryListener.java index d54b106f9e0..57233637416 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryListener.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/ReachableQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/ReachableQuery.java index 9a50739274c..8ee0f629792 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/ReachableQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/ReachableQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,20 +24,10 @@ */ - -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java index 0a2b73d2cd0..8256928f0b9 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootStackQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootStackQuery.java index 5b14ebe0fbf..45fd7d86ac1 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootStackQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootStackQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootsQuery.java b/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootsQuery.java index b9d71d4d573..a9db43f6983 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootsQuery.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/server/RootsQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.server; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/util/ArraySorter.java b/jdk/src/share/classes/com/sun/tools/hat/internal/util/ArraySorter.java index 84503e3057f..77b93290ffe 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/util/ArraySorter.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/util/ArraySorter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.util; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/util/Comparer.java b/jdk/src/share/classes/com/sun/tools/hat/internal/util/Comparer.java index 941f90f0e6c..aa1f147ee7b 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/util/Comparer.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/util/Comparer.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.util; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/util/CompositeEnumeration.java b/jdk/src/share/classes/com/sun/tools/hat/internal/util/CompositeEnumeration.java index ec1804b6cbc..2042850141c 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/util/CompositeEnumeration.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/util/CompositeEnumeration.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -25,20 +25,9 @@ /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.util; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/util/Misc.java b/jdk/src/share/classes/com/sun/tools/hat/internal/util/Misc.java index 2a87657a05f..42b5bd1310d 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/util/Misc.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/util/Misc.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2006 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.util; diff --git a/jdk/src/share/classes/com/sun/tools/hat/internal/util/VectorSorter.java b/jdk/src/share/classes/com/sun/tools/hat/internal/util/VectorSorter.java index cb963d6de43..776f9088f6a 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/internal/util/VectorSorter.java +++ b/jdk/src/share/classes/com/sun/tools/hat/internal/util/VectorSorter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2005 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 @@ -24,19 +24,10 @@ */ -/* The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * +/* * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. + * at JavaSoft/Sun. */ package com.sun.tools.hat.internal.util; diff --git a/jdk/src/share/classes/com/sun/tools/hat/resources/hat.js b/jdk/src/share/classes/com/sun/tools/hat/resources/hat.js index e81eae514d3..1b8cfdc935b 100644 --- a/jdk/src/share/classes/com/sun/tools/hat/resources/hat.js +++ b/jdk/src/share/classes/com/sun/tools/hat/resources/hat.js @@ -23,22 +23,10 @@ * have any questions. */ - /* - * The contents of this file are subject to the Sun Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. A copy of the License is available at - * http://www.sun.com/, and in the file LICENSE.html in the - * doc directory. - * * The Original Code is HAT. The Initial Developer of the * Original Code is Bill Foote, with contributions from others - * at JavaSoft/Sun. Portions created by Bill Foote and others - * at Javasoft/Sun are Copyright (C) 1997-2004. All Rights Reserved. - * - * In addition to the formal license, I ask that you don't - * change the history or donations files without permission. - * + * at JavaSoft/Sun. */ var hatPkg = Packages.com.sun.tools.hat.internal; From f8f23e46abb352101a95b5017ec52aeb5ec495af Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Thu, 1 May 2008 14:47:50 +0400 Subject: [PATCH 42/46] 6688203: Memory leak and performance problems in the method getFileSystemView of FileSystemView Removed from the "FileSystemView#getFileSystemView" method creation of a new listener and adding it to UIManager Reviewed-by: peterz --- .../swing/filechooser/FileSystemView.java | 45 ++++++----- .../JFileChooser/6688203/bug6688203.java | 81 +++++++++++++++++++ 2 files changed, 106 insertions(+), 20 deletions(-) create mode 100644 jdk/test/javax/swing/JFileChooser/6688203/bug6688203.java diff --git a/jdk/src/share/classes/javax/swing/filechooser/FileSystemView.java b/jdk/src/share/classes/javax/swing/filechooser/FileSystemView.java index b51b05dc110..a3773ab09e1 100644 --- a/jdk/src/share/classes/javax/swing/filechooser/FileSystemView.java +++ b/jdk/src/share/classes/javax/swing/filechooser/FileSystemView.java @@ -26,26 +26,18 @@ package javax.swing.filechooser; -import javax.swing.event.*; import javax.swing.*; import java.awt.Image; import java.io.File; -import java.io.FileFilter; -import java.io.FilenameFilter; import java.io.FileNotFoundException; import java.io.IOException; import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import java.util.Vector; +import java.lang.ref.WeakReference; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; - -import java.lang.reflect.*; - import sun.awt.shell.*; /** @@ -74,18 +66,11 @@ public abstract class FileSystemView { static FileSystemView unixFileSystemView = null; //static FileSystemView macFileSystemView = null; static FileSystemView genericFileSystemView = null; - static boolean useSystemExtensionsHiding = false; + + private boolean useSystemExtensionHiding = + UIManager.getDefaults().getBoolean("FileChooser.useSystemExtensionHiding"); public static FileSystemView getFileSystemView() { - useSystemExtensionsHiding = UIManager.getDefaults().getBoolean("FileChooser.useSystemExtensionHiding"); - UIManager.addPropertyChangeListener(new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent e) { - if (e.getPropertyName().equals("lookAndFeel")) { - useSystemExtensionsHiding = UIManager.getDefaults().getBoolean("FileChooser.useSystemExtensionHiding"); - } - } - }); - if(File.separatorChar == '\\') { if(windowsFileSystemView == null) { windowsFileSystemView = new WindowsFileSystemView(); @@ -113,6 +98,26 @@ public abstract class FileSystemView { return genericFileSystemView; } + public FileSystemView() { + final WeakReference weakReference = new WeakReference(this); + + UIManager.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + FileSystemView fileSystemView = weakReference.get(); + + if (fileSystemView == null) { + // FileSystemView was destroyed + UIManager.removePropertyChangeListener(this); + } else { + if (evt.getPropertyName().equals("lookAndFeel")) { + fileSystemView.useSystemExtensionHiding = + UIManager.getDefaults().getBoolean("FileChooser.useSystemExtensionHiding"); + } + } + } + }); + } + /** * Determines if the given file is a root in the navigatable tree(s). * Examples: Windows 98 has one root, the Desktop folder. DOS has one root @@ -170,7 +175,7 @@ public abstract class FileSystemView { if (f != null) { name = f.getName(); if (!name.equals("..") && !name.equals(".") && - (useSystemExtensionsHiding || + (useSystemExtensionHiding || !isFileSystem(f) || isFileSystemRoot(f)) && ((f instanceof ShellFolder) || diff --git a/jdk/test/javax/swing/JFileChooser/6688203/bug6688203.java b/jdk/test/javax/swing/JFileChooser/6688203/bug6688203.java new file mode 100644 index 00000000000..54e9c86da19 --- /dev/null +++ b/jdk/test/javax/swing/JFileChooser/6688203/bug6688203.java @@ -0,0 +1,81 @@ +/* + * 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 6688203 + @summary Memory leak and performance problems in the method getFileSystemView of FileSystemView + @author Pavel Porvatov + @run main bug6688203 +*/ + +import javax.swing.*; +import javax.swing.filechooser.FileSystemView; +import java.io.File; +import java.lang.reflect.Field; + +public class bug6688203 { + public static void main(String[] args) { + // Create an instance of FileSystemView + FileSystemView.getFileSystemView(); + + int startCount = UIManager.getPropertyChangeListeners().length; + + for (int i = 0; i < 100; i++) { + FileSystemView.getFileSystemView(); + } + + if (startCount != UIManager.getPropertyChangeListeners().length) { + throw new RuntimeException("New listeners were added into UIManager"); + } + + FileSystemView fileSystemView = FileSystemView.getFileSystemView(); + File file = new File("Some file"); + + for (UIManager.LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) { + try { + UIManager.setLookAndFeel(lafInfo.getClassName()); + } catch (Exception e) { + // Ignore such errors + System.out.println("Cannot set LAF " + lafInfo.getName()); + + continue; + } + + fileSystemView.getSystemDisplayName(file); + + try { + Field field = FileSystemView.class.getDeclaredField("useSystemExtensionHiding"); + + field.setAccessible(true); + + Boolean value = field.getBoolean(fileSystemView); + + if (value != UIManager.getDefaults().getBoolean("FileChooser.useSystemExtensionHiding")) { + throw new RuntimeException("Invalid cached value of the FileSystemView.useSystemExtensionHiding field"); + } + } catch (Exception e) { + throw new RuntimeException("Cannot read the FileSystemView.useSystemExtensionHiding field", e); + } + } + } +} From cc169e2b9d3bb2e4c3b4cf05fb515160482f5e15 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 7 May 2008 16:08:31 +0400 Subject: [PATCH 43/46] 6625450: javax.swing.border.TitledBorder.getBaseline() doesn't throw IAE when width is < 0 Necessary check is added Reviewed-by: peterz, alexp --- .../javax/swing/border/TitledBorder.java | 5 +- jdk/test/javax/swing/border/Test6625450.java | 67 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 jdk/test/javax/swing/border/Test6625450.java diff --git a/jdk/src/share/classes/javax/swing/border/TitledBorder.java b/jdk/src/share/classes/javax/swing/border/TitledBorder.java index b0d565e88fd..eb50e95ee9e 100644 --- a/jdk/src/share/classes/javax/swing/border/TitledBorder.java +++ b/jdk/src/share/classes/javax/swing/border/TitledBorder.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -642,6 +642,9 @@ public class TitledBorder extends AbstractBorder if (c == null) { throw new NullPointerException("Must supply non-null component"); } + if (width < 0) { + throw new IllegalArgumentException("Width must be >= 0"); + } if (height < 0) { throw new IllegalArgumentException("Height must be >= 0"); } diff --git a/jdk/test/javax/swing/border/Test6625450.java b/jdk/test/javax/swing/border/Test6625450.java new file mode 100644 index 00000000000..c543e53ed96 --- /dev/null +++ b/jdk/test/javax/swing/border/Test6625450.java @@ -0,0 +1,67 @@ +/* + * 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 6625450 + * @summary Tests the baseline of the titled border + * @author Sergey Malenkov + */ + +import java.awt.Component; +import javax.swing.border.TitledBorder; + +public class Test6625450 { + + public static void main(String[] args) { + // test height + test(false, 0, Integer.MAX_VALUE); + test(false, 0, 1); + test(true, 0, -1); + test(true, 0, Integer.MIN_VALUE); + // test width + test(false, Integer.MAX_VALUE, 0); + test(false, 1, 0); + test(true, -1, 0); + test(true, Integer.MIN_VALUE, 0); + } + + private static final TitledBorder BORDER = new TitledBorder("123"); + private static final Component COMPONENT = new Component() { + }; + + private static void test(boolean expected, int width, int height) { + try { + BORDER.getBaseline(COMPONENT, width, height); + + if (expected) { + throw new Error("expected IllegalArgumentException"); + } + } + catch (IllegalArgumentException exception) { + if (!expected) { + throw new Error("unexpected exception", exception); + } + } + } +} From bc777dbec959f06222f091dd846bb1f68e962921 Mon Sep 17 00:00:00 2001 From: Pavel Porvatov Date: Wed, 7 May 2008 20:26:32 +0400 Subject: [PATCH 44/46] 6635277: Incorrect text seen when creating a new folder, when selection is on the image file in JFileChooser Corrected bounds of editor area Reviewed-by: loneid --- jdk/src/share/classes/sun/swing/FilePane.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/jdk/src/share/classes/sun/swing/FilePane.java b/jdk/src/share/classes/sun/swing/FilePane.java index c605a54a88e..eaba7b1534f 100644 --- a/jdk/src/share/classes/sun/swing/FilePane.java +++ b/jdk/src/share/classes/sun/swing/FilePane.java @@ -1285,7 +1285,6 @@ public class FilePane extends JPanel implements PropertyChangeListener { int lastIndex = -1; File editFile = null; - int editX = 20; private int getEditIndex() { return lastIndex; @@ -1315,7 +1314,9 @@ public class FilePane extends JPanel implements PropertyChangeListener { * @param index visual index of the file to be edited */ private void editFileName(int index) { - File currentDirectory = getFileChooser().getCurrentDirectory(); + JFileChooser chooser = getFileChooser(); + File currentDirectory = chooser.getCurrentDirectory(); + if (readOnly || !canWrite(currentDirectory)) { return; } @@ -1332,9 +1333,15 @@ public class FilePane extends JPanel implements PropertyChangeListener { editCell.setNextFocusableComponent(list); } list.add(editCell); - editCell.setText(getFileChooser().getName(editFile)); + editCell.setText(chooser.getName(editFile)); ComponentOrientation orientation = list.getComponentOrientation(); editCell.setComponentOrientation(orientation); + + Icon icon = chooser.getIcon(editFile); + + // PENDING - grab padding (4) below from defaults table. + int editX = icon == null ? 20 : icon.getIconWidth() + 4; + if (orientation.isLeftToRight()) { editCell.setBounds(editX + r.x, r.y, r.width - editX, r.height); } else { @@ -1458,11 +1465,6 @@ public class FilePane extends JPanel implements PropertyChangeListener { Icon icon = getFileChooser().getIcon(file); if (icon != null) { setIcon(icon); - - if (isSelected) { - // PENDING - grab padding (4) below from defaults table. - editX = icon.getIconWidth() + 4; - } } else { if (getFileChooser().getFileSystemView().isTraversable(file)) { setText(fileName+File.separator); From 99f494c8ee79388b2985736be68c80504b6b4239 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 7 May 2008 21:54:03 +0400 Subject: [PATCH 45/46] 6348456: BasicColorChooserUI ignores JColorChooser selection model changes Some methods are moved from AbstractColorChooserPanel to BasicColorChooserUI Reviewed-by: peterz, alexp --- .../AbstractColorChooserPanel.java | 36 +---------- .../swing/plaf/basic/BasicColorChooserUI.java | 39 ++++++++---- .../swing/JColorChooser/Test6348456.html | 9 +++ .../swing/JColorChooser/Test6348456.java | 63 +++++++++++++++++++ 4 files changed, 99 insertions(+), 48 deletions(-) create mode 100644 jdk/test/javax/swing/JColorChooser/Test6348456.html create mode 100644 jdk/test/javax/swing/JColorChooser/Test6348456.java diff --git a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java index c01c9929040..9fa819ba935 100644 --- a/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java +++ b/jdk/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java @@ -1,5 +1,5 @@ /* - * Copyright 1998-2001 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-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 @@ -26,9 +26,7 @@ package javax.swing.colorchooser; import java.awt.*; -import java.io.Serializable; import javax.swing.*; -import javax.swing.event.*; /** * This is the abstract superclass for color choosers. If you want to add @@ -54,17 +52,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { */ private JColorChooser chooser; - /** - * - */ - private ChangeListener colorListener; - - /** - * - */ - private boolean dirty = true; - - /** * Invoked automatically when the model's state changes. * It is also called by installChooserPanel to allow @@ -157,8 +144,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { chooser = enclosingChooser; buildChooser(); updateChooser(); - colorListener = new ModelListener(); - getColorSelectionModel().addChangeListener(colorListener); } /** @@ -166,7 +151,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { * If override this, be sure to call super. */ public void uninstallChooserPanel(JColorChooser enclosingChooser) { - getColorSelectionModel().removeChangeListener(colorListener); chooser = null; } @@ -192,10 +176,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { * @param g the Graphics object */ public void paint(Graphics g) { - if (dirty) { - updateChooser(); - dirty = false; - } super.paint(g); } @@ -222,18 +202,4 @@ public abstract class AbstractColorChooserPanel extends JPanel { } return defaultValue; } - - /** - * - */ - class ModelListener implements ChangeListener, Serializable { - public void stateChanged(ChangeEvent e) { - if (isShowing()) { // isVisible - updateChooser(); - dirty = false; - } else { - dirty = true; - } - } - } } diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java index 43d28fed0a9..fd63e7fcbb6 100644 --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -30,16 +30,12 @@ import javax.swing.colorchooser.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.plaf.*; -import java.util.*; import java.awt.*; -import java.awt.image.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.Serializable; import sun.swing.DefaultLookup; -import sun.swing.UIAction; /** * Provides the basic look and feel for a JColorChooser. @@ -212,9 +208,24 @@ public class BasicColorChooserUI extends ColorChooserUI protected void uninstallListeners() { chooser.removePropertyChangeListener( propertyChangeListener ); chooser.getSelectionModel().removeChangeListener(previewListener); + previewListener = null; previewPanel.removeMouseListener(getHandler()); } + private void selectionChanged(ColorSelectionModel model) { + if (this.previewPanel != null) { + this.previewPanel.setForeground(model.getSelectedColor()); + this.previewPanel.repaint(); + } + AbstractColorChooserPanel[] panels = this.chooser.getChooserPanels(); + if (panels != null) { + for (AbstractColorChooserPanel panel : panels) { + if (panel != null) { + panel.updateChooser(); + } + } + } + } private class Handler implements ChangeListener, MouseListener, PropertyChangeListener { @@ -222,11 +233,7 @@ public class BasicColorChooserUI extends ColorChooserUI // ChangeListener // public void stateChanged(ChangeEvent evt) { - ColorSelectionModel model = (ColorSelectionModel)evt.getSource(); - if (previewPanel != null) { - previewPanel.setForeground(model.getSelectedColor()); - previewPanel.repaint(); - } + selectionChanged((ColorSelectionModel) evt.getSource()); } // @@ -302,13 +309,19 @@ public class BasicColorChooserUI extends ColorChooserUI newPanels[i].installChooserPanel(chooser); } } - - if (prop == JColorChooser.PREVIEW_PANEL_PROPERTY) { + else if (prop == JColorChooser.PREVIEW_PANEL_PROPERTY) { if (evt.getNewValue() != previewPanel) { installPreviewPanel(); } } - if (prop == "componentOrientation") { + else if (prop == JColorChooser.SELECTION_MODEL_PROPERTY) { + ColorSelectionModel oldModel = (ColorSelectionModel) evt.getOldValue(); + oldModel.removeChangeListener(previewListener); + ColorSelectionModel newModel = (ColorSelectionModel) evt.getNewValue(); + newModel.addChangeListener(previewListener); + selectionChanged(newModel); + } + else if (prop == "componentOrientation") { ComponentOrientation o = (ComponentOrientation)evt.getNewValue(); JColorChooser cc = (JColorChooser)evt.getSource(); diff --git a/jdk/test/javax/swing/JColorChooser/Test6348456.html b/jdk/test/javax/swing/JColorChooser/Test6348456.html new file mode 100644 index 00000000000..6829c7810c4 --- /dev/null +++ b/jdk/test/javax/swing/JColorChooser/Test6348456.html @@ -0,0 +1,9 @@ + + +When applet starts, you'll see that the preview is white. +When you swap models, you'll see that the preview color is changed. + + + + + diff --git a/jdk/test/javax/swing/JColorChooser/Test6348456.java b/jdk/test/javax/swing/JColorChooser/Test6348456.java new file mode 100644 index 00000000000..9d00d6dcba3 --- /dev/null +++ b/jdk/test/javax/swing/JColorChooser/Test6348456.java @@ -0,0 +1,63 @@ +/* + * 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 6348456 + * @summary Tests model changing + * @author Sergey Malenkov + * @run applet/manual=yesno Test6348456.html + */ + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JApplet; +import javax.swing.JButton; +import javax.swing.JColorChooser; +import javax.swing.colorchooser.DefaultColorSelectionModel; + +public final class Test6348456 extends JApplet implements ActionListener { + + private static final DefaultColorSelectionModel WHITE = new DefaultColorSelectionModel(Color.WHITE); + private static final DefaultColorSelectionModel BLACK = new DefaultColorSelectionModel(Color.BLACK); + + private JColorChooser chooser; + + @Override + public void init() { + JButton button = new JButton("Swap models"); + button.addActionListener(this); + + this.chooser = new JColorChooser(Color.RED); + this.chooser.setSelectionModel(WHITE); + + add(BorderLayout.NORTH, button); + add(BorderLayout.CENTER, this.chooser); + } + + public void actionPerformed(ActionEvent event){ + this.chooser.setSelectionModel(this.chooser.getSelectionModel() == BLACK ? WHITE : BLACK); + } +} From c2072462fb739e34c0a8a5fbea51607c9bca49cf Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 7 May 2008 23:20:32 +0400 Subject: [PATCH 46/46] 4935607: RFE: LTP: Should be possible to set the TRANSIENT attribute of propertiies to FALSE Add the Transient annotation and support it (JSR-273) Reviewed-by: peterz, loneid --- jdk/src/share/classes/java/awt/Component.java | 7 +- jdk/src/share/classes/java/awt/Dimension.java | 4 +- jdk/src/share/classes/java/awt/Point.java | 4 +- jdk/src/share/classes/java/awt/Rectangle.java | 4 +- .../share/classes/java/awt/ScrollPane.java | 4 +- .../java/awt/geom/RectangularShape.java | 4 +- .../classes/java/awt/im/InputContext.java | 4 +- .../beans/DefaultPersistenceDelegate.java | 89 ++-- .../java/beans/EventSetDescriptor.java | 5 +- .../classes/java/beans/FeatureDescriptor.java | 115 ++--- .../java/beans/IndexedPropertyDescriptor.java | 4 +- .../share/classes/java/beans/MetaData.java | 155 +------ .../java/beans/PropertyDescriptor.java | 5 +- .../share/classes/java/beans/Transient.java | 68 +++ .../classes/javax/swing/AbstractButton.java | 7 +- .../swing/DefaultListSelectionModel.java | 5 +- .../share/classes/javax/swing/ImageIcon.java | 5 +- .../share/classes/javax/swing/JComboBox.java | 7 +- .../share/classes/javax/swing/JComponent.java | 10 +- jdk/src/share/classes/javax/swing/JLabel.java | 4 +- jdk/src/share/classes/javax/swing/JList.java | 8 +- .../share/classes/javax/swing/JMenuBar.java | 4 +- .../classes/javax/swing/JScrollPane.java | 11 +- .../classes/javax/swing/JTabbedPane.java | 6 +- .../share/classes/javax/swing/JViewport.java | 4 +- .../javax/swing/table/JTableHeader.java | 4 +- .../javax/swing/text/JTextComponent.java | 7 +- .../java/beans/Introspector/BeanUtils.java | 66 ++- .../java/beans/Introspector/Test4896879.java | 12 +- .../java/beans/Introspector/Test4935607.java | 404 ++++++++++++++++++ .../java/beans/XMLEncoder/Test4935607.java | 83 ++++ 31 files changed, 817 insertions(+), 302 deletions(-) create mode 100644 jdk/src/share/classes/java/beans/Transient.java create mode 100644 jdk/test/java/beans/Introspector/Test4935607.java create mode 100644 jdk/test/java/beans/XMLEncoder/Test4935607.java diff --git a/jdk/src/share/classes/java/awt/Component.java b/jdk/src/share/classes/java/awt/Component.java index b48b8c552fd..6ab84df579d 100644 --- a/jdk/src/share/classes/java/awt/Component.java +++ b/jdk/src/share/classes/java/awt/Component.java @@ -1,5 +1,5 @@ /* - * Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-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 @@ -49,6 +49,7 @@ import java.io.ObjectInputStream; import java.io.IOException; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.beans.Transient; import java.awt.event.InputMethodListener; import java.awt.event.InputMethodEvent; import java.awt.im.InputContext; @@ -1100,6 +1101,7 @@ public abstract class Component implements ImageObserver, MenuContainer, * @see #setVisible * @since JDK1.0 */ + @Transient public boolean isVisible() { return isVisible_NoClientCode(); } @@ -1531,6 +1533,7 @@ public abstract class Component implements ImageObserver, MenuContainer, * @beaninfo * bound: true */ + @Transient public Color getForeground() { Color foreground = this.foreground; if (foreground != null) { @@ -1585,6 +1588,7 @@ public abstract class Component implements ImageObserver, MenuContainer, * @see #setBackground * @since JDK1.0 */ + @Transient public Color getBackground() { Color background = this.background; if (background != null) { @@ -1644,6 +1648,7 @@ public abstract class Component implements ImageObserver, MenuContainer, * @see #setFont * @since JDK1.0 */ + @Transient public Font getFont() { return getFont_NoClientCode(); } diff --git a/jdk/src/share/classes/java/awt/Dimension.java b/jdk/src/share/classes/java/awt/Dimension.java index b2bad361340..c0e2c75525d 100644 --- a/jdk/src/share/classes/java/awt/Dimension.java +++ b/jdk/src/share/classes/java/awt/Dimension.java @@ -1,5 +1,5 @@ /* - * Copyright 1995-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-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 @@ -26,6 +26,7 @@ package java.awt; import java.awt.geom.Dimension2D; +import java.beans.Transient; /** * The Dimension class encapsulates the width and @@ -165,6 +166,7 @@ public class Dimension extends Dimension2D implements java.io.Serializable { * @see java.awt.Component#getSize * @since 1.1 */ + @Transient public Dimension getSize() { return new Dimension(width, height); } diff --git a/jdk/src/share/classes/java/awt/Point.java b/jdk/src/share/classes/java/awt/Point.java index 73c4aa3e79f..9bbe0346955 100644 --- a/jdk/src/share/classes/java/awt/Point.java +++ b/jdk/src/share/classes/java/awt/Point.java @@ -1,5 +1,5 @@ /* - * Copyright 1995-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-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 @@ -26,6 +26,7 @@ package java.awt; import java.awt.geom.Point2D; +import java.beans.Transient; /** * A point representing a location in {@code (x,y)} coordinate space, @@ -119,6 +120,7 @@ public class Point extends Point2D implements java.io.Serializable { * @see java.awt.Point#setLocation(int, int) * @since 1.1 */ + @Transient public Point getLocation() { return new Point(x, y); } diff --git a/jdk/src/share/classes/java/awt/Rectangle.java b/jdk/src/share/classes/java/awt/Rectangle.java index 1457b4d07bc..bf51092ef1f 100644 --- a/jdk/src/share/classes/java/awt/Rectangle.java +++ b/jdk/src/share/classes/java/awt/Rectangle.java @@ -1,5 +1,5 @@ /* - * Copyright 1995-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-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 @@ -26,6 +26,7 @@ package java.awt; import java.awt.geom.Rectangle2D; +import java.beans.Transient; /** * A Rectangle specifies an area in a coordinate space that is @@ -308,6 +309,7 @@ public class Rectangle extends Rectangle2D * @see #setBounds(int, int, int, int) * @since 1.1 */ + @Transient public Rectangle getBounds() { return new Rectangle(x, y, width, height); } diff --git a/jdk/src/share/classes/java/awt/ScrollPane.java b/jdk/src/share/classes/java/awt/ScrollPane.java index f4303c0aea4..b34c978474f 100644 --- a/jdk/src/share/classes/java/awt/ScrollPane.java +++ b/jdk/src/share/classes/java/awt/ScrollPane.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -32,6 +32,7 @@ import sun.awt.ScrollPaneWheelScroller; import sun.awt.SunToolkit; import java.beans.ConstructorProperties; +import java.beans.Transient; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.IOException; @@ -390,6 +391,7 @@ public class ScrollPane extends Container implements Accessible { * @throws NullPointerException if the scrollpane does not contain * a child */ + @Transient public Point getScrollPosition() { if (ncomponents <= 0) { throw new NullPointerException("child is null"); diff --git a/jdk/src/share/classes/java/awt/geom/RectangularShape.java b/jdk/src/share/classes/java/awt/geom/RectangularShape.java index 9e733e90c2c..32cbbe678f2 100644 --- a/jdk/src/share/classes/java/awt/geom/RectangularShape.java +++ b/jdk/src/share/classes/java/awt/geom/RectangularShape.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -27,6 +27,7 @@ package java.awt.geom; import java.awt.Shape; import java.awt.Rectangle; +import java.beans.Transient; /** * RectangularShape is the base class for a number of @@ -171,6 +172,7 @@ public abstract class RectangularShape implements Shape, Cloneable { * @see #setFrame(Rectangle2D) * @since 1.2 */ + @Transient public Rectangle2D getFrame() { return new Rectangle2D.Double(getX(), getY(), getWidth(), getHeight()); } diff --git a/jdk/src/share/classes/java/awt/im/InputContext.java b/jdk/src/share/classes/java/awt/im/InputContext.java index 9e5d7fa3623..0da7fcb42ff 100644 --- a/jdk/src/share/classes/java/awt/im/InputContext.java +++ b/jdk/src/share/classes/java/awt/im/InputContext.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -28,6 +28,7 @@ package java.awt.im; import java.awt.Component; import java.util.Locale; import java.awt.AWTEvent; +import java.beans.Transient; import java.lang.Character.Subset; import sun.awt.im.InputMethodContext; @@ -231,6 +232,7 @@ public class InputContext { * @see #setCompositionEnabled * @since 1.3 */ + @Transient public boolean isCompositionEnabled() { // real implementation is in sun.awt.im.InputContext return false; diff --git a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java index 9970d53dbba..6553a517200 100644 --- a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java +++ b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-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 @@ -164,53 +164,19 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate { return new Expression(oldInstance, oldInstance.getClass(), "new", constructorArgs); } - private Method findMethod(Class type, String property) throws IntrospectionException { + private Method findMethod(Class type, String property) { if (property == null) { throw new IllegalArgumentException("Property name is null"); } - BeanInfo info = Introspector.getBeanInfo(type); - for (PropertyDescriptor pd : info.getPropertyDescriptors()) { - if (property.equals(pd.getName())) { - Method method = pd.getReadMethod(); - if (method != null) { - return method; - } - throw new IllegalStateException("Could not find getter for the property " + property); - } + PropertyDescriptor pd = getPropertyDescriptor(type, property); + if (pd == null) { + throw new IllegalStateException("Could not find property by the name " + property); } - throw new IllegalStateException("Could not find property by the name " + property); - } - - // This is a workaround for a bug in the introspector. - // PropertyDescriptors are not shared amongst subclasses. - private boolean isTransient(Class type, PropertyDescriptor pd) { - if (type == null) { - return false; + Method method = pd.getReadMethod(); + if (method == null) { + throw new IllegalStateException("Could not find getter for the property " + property); } - // This code was mistakenly deleted - it may be fine and - // is more efficient than the code below. This should - // all disappear anyway when property descriptors are shared - // by the introspector. - /* - Method getter = pd.getReadMethod(); - Class declaringClass = getter.getDeclaringClass(); - if (declaringClass == type) { - return Boolean.TRUE.equals(pd.getValue("transient")); - } - */ - String pName = pd.getName(); - BeanInfo info = MetaData.getBeanInfo(type); - PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors(); - for (int i = 0; i < propertyDescriptors.length; ++i ) { - PropertyDescriptor pd2 = propertyDescriptors[i]; - if (pName.equals(pd2.getName())) { - Object value = pd2.getValue("transient"); - if (value != null) { - return Boolean.TRUE.equals(value); - } - } - } - return isTransient(type.getSuperclass(), pd); + return method; } private static boolean equals(Object o1, Object o2) { @@ -221,7 +187,7 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate { Method getter = pd.getReadMethod(); Method setter = pd.getWriteMethod(); - if (getter != null && setter != null && !isTransient(type, pd)) { + if (getter != null && setter != null) { Expression oldGetExp = new Expression(oldInstance, getter.getName(), new Object[]{}); Expression newGetExp = new Expression(newInstance, getter.getName(), new Object[]{}); Object oldValue = oldGetExp.getValue(); @@ -254,14 +220,19 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate { // Write out the properties of this instance. private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) { - // System.out.println("initBean: " + oldInstance); - BeanInfo info = MetaData.getBeanInfo(type); - + BeanInfo info; + try { + info = Introspector.getBeanInfo(type); + } catch (IntrospectionException exception) { + return; + } // Properties - PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors(); - for (int i = 0; i < propertyDescriptors.length; ++i ) { + for (PropertyDescriptor d : info.getPropertyDescriptors()) { + if (d.isTransient()) { + continue; + } try { - doProperty(type, propertyDescriptors[i], oldInstance, newInstance, out); + doProperty(type, d, oldInstance, newInstance, out); } catch (Exception e) { out.getExceptionListener().exceptionThrown(e); @@ -295,9 +266,10 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate { if (!java.awt.Component.class.isAssignableFrom(type)) { return; // Just handle the listeners of Components for now. } - EventSetDescriptor[] eventSetDescriptors = info.getEventSetDescriptors(); - for (int e = 0; e < eventSetDescriptors.length; e++) { - EventSetDescriptor d = eventSetDescriptors[e]; + for (EventSetDescriptor d : info.getEventSetDescriptors()) { + if (d.isTransient()) { + continue; + } Class listenerType = d.getListenerType(); @@ -408,4 +380,15 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate { initBean(type, oldInstance, newInstance, out); } } + + private static PropertyDescriptor getPropertyDescriptor(Class type, String property) { + try { + for (PropertyDescriptor pd : Introspector.getBeanInfo(type).getPropertyDescriptors()) { + if (property.equals(pd.getName())) + return pd; + } + } catch (IntrospectionException exception) { + } + return null; + } } diff --git a/jdk/src/share/classes/java/beans/EventSetDescriptor.java b/jdk/src/share/classes/java/beans/EventSetDescriptor.java index 8c30657e0c3..05b62d8caf1 100644 --- a/jdk/src/share/classes/java/beans/EventSetDescriptor.java +++ b/jdk/src/share/classes/java/beans/EventSetDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -369,6 +369,7 @@ public class EventSetDescriptor extends FeatureDescriptor { setClass0(method.getDeclaringClass()); } addMethodDescriptor = new MethodDescriptor(method); + setTransient(method.getAnnotation(Transient.class)); } /** @@ -389,6 +390,7 @@ public class EventSetDescriptor extends FeatureDescriptor { setClass0(method.getDeclaringClass()); } removeMethodDescriptor = new MethodDescriptor(method); + setTransient(method.getAnnotation(Transient.class)); } /** @@ -411,6 +413,7 @@ public class EventSetDescriptor extends FeatureDescriptor { setClass0(method.getDeclaringClass()); } getMethodDescriptor = new MethodDescriptor(method); + setTransient(method.getAnnotation(Transient.class)); } /** diff --git a/jdk/src/share/classes/java/beans/FeatureDescriptor.java b/jdk/src/share/classes/java/beans/FeatureDescriptor.java index eea5a29d81c..36adbc044d6 100644 --- a/jdk/src/share/classes/java/beans/FeatureDescriptor.java +++ b/jdk/src/share/classes/java/beans/FeatureDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -32,7 +32,9 @@ import java.lang.ref.WeakReference; import java.lang.ref.SoftReference; import java.lang.reflect.Method; -import java.lang.reflect.Type; + +import java.util.Enumeration; +import java.util.Hashtable; /** * The FeatureDescriptor class is the common baseclass for PropertyDescriptor, @@ -46,6 +48,7 @@ import java.lang.reflect.Type; */ public class FeatureDescriptor { + private static final String TRANSIENT = "transient"; private Reference classRef; @@ -187,10 +190,7 @@ public class FeatureDescriptor { * @param value The value. */ public void setValue(String attributeName, Object value) { - if (table == null) { - table = new java.util.Hashtable(); - } - table.put(attributeName, value); + getTable().put(attributeName, value); } /** @@ -201,10 +201,9 @@ public class FeatureDescriptor { * the attribute is unknown. */ public Object getValue(String attributeName) { - if (table == null) { - return null; - } - return table.get(attributeName); + return (this.table != null) + ? this.table.get(attributeName) + : null; } /** @@ -214,11 +213,8 @@ public class FeatureDescriptor { * @return An enumeration of the locale-independent names of any * attributes that have been registered with setValue. */ - public java.util.Enumeration attributeNames() { - if (table == null) { - table = new java.util.Hashtable(); - } - return table.keys(); + public Enumeration attributeNames() { + return getTable().keys(); } /** @@ -268,16 +264,54 @@ public class FeatureDescriptor { addTable(old.table); } - private void addTable(java.util.Hashtable t) { - if (t == null) { - return; + /** + * Copies all values from the specified attribute table. + * If some attribute is exist its value should be overridden. + * + * @param table the attribute table with new values + */ + private void addTable(Hashtable table) { + if ((table != null) && !table.isEmpty()) { + getTable().putAll(table); } - java.util.Enumeration keys = t.keys(); - while (keys.hasMoreElements()) { - String key = (String)keys.nextElement(); - Object value = t.get(key); - setValue(key, value); + } + + /** + * Returns the initialized attribute table. + * + * @return the initialized attribute table + */ + private Hashtable getTable() { + if (this.table == null) { + this.table = new Hashtable(); } + return this.table; + } + + /** + * Sets the "transient" attribute according to the annotation. + * If the "transient" attribute is already set + * it should not be changed. + * + * @param annotation the annotation of the element of the feature + */ + void setTransient(Transient annotation) { + if ((annotation != null) && (null == getValue(TRANSIENT))) { + setValue(TRANSIENT, annotation.value()); + } + } + + /** + * Indicates whether the feature is transient. + * + * @return {@code true} if the feature is transient, + * {@code false} otherwise + */ + boolean isTransient() { + Object value = getValue(TRANSIENT); + return (value instanceof Boolean) + ? (Boolean) value + : false; } // Package private methods for recreating the weak/soft referent @@ -292,39 +326,6 @@ public class FeatureDescriptor { : null; } - /** - * Create a Reference wrapper for the object. - * - * @param obj object that will be wrapped - * @param soft true if a SoftReference should be created; otherwise Soft - * @return a Reference or null if obj is null. - */ - static Reference createReference(Object obj, boolean soft) { - Reference ref = null; - if (obj != null) { - if (soft) { - ref = new SoftReference(obj); - } else { - ref = new WeakReference(obj); - } - } - return ref; - } - - // Convenience method which creates a WeakReference. - static Reference createReference(Object obj) { - return createReference(obj, false); - } - - /** - * Returns an object from a Reference wrapper. - * - * @return the Object in a wrapper or null. - */ - static Object getObject(Reference ref) { - return (ref == null) ? null : (Object)ref.get(); - } - /** * Creates a new soft reference that refers to the given object. * @@ -391,5 +392,5 @@ public class FeatureDescriptor { private String shortDescription; private String name; private String displayName; - private java.util.Hashtable table; + private Hashtable table; } diff --git a/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java b/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java index 3b1a39e38a4..fa5b404c239 100644 --- a/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java +++ b/jdk/src/share/classes/java/beans/IndexedPropertyDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -231,6 +231,7 @@ perty. indexedReadMethodName = readMethod.getName(); this.indexedReadMethodRef = getSoftReference(readMethod); + setTransient(readMethod.getAnnotation(Transient.class)); } @@ -303,6 +304,7 @@ perty. indexedWriteMethodName = writeMethod.getName(); this.indexedWriteMethodRef = getSoftReference(writeMethod); + setTransient(writeMethod.getAnnotation(Transient.class)); } /** diff --git a/jdk/src/share/classes/java/beans/MetaData.java b/jdk/src/share/classes/java/beans/MetaData.java index 7b9f6ced377..9bcd505c215 100644 --- a/jdk/src/share/classes/java/beans/MetaData.java +++ b/jdk/src/share/classes/java/beans/MetaData.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-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 @@ -1352,7 +1352,6 @@ final class sun_swing_PrintColorUIResource_PersistenceDelegate extends Persisten class MetaData { private static Hashtable internalPersistenceDelegates = new Hashtable(); - private static Hashtable transientProperties = new Hashtable(); private static PersistenceDelegate nullPersistenceDelegate = new NullPersistenceDelegate(); private static PersistenceDelegate enumPersistenceDelegate = new EnumPersistenceDelegate(); @@ -1383,94 +1382,6 @@ class MetaData { internalPersistenceDelegates.put("java.util.JumboEnumSet", new java_util_EnumSet_PersistenceDelegate()); internalPersistenceDelegates.put("java.util.RegularEnumSet", new java_util_EnumSet_PersistenceDelegate()); - -// Transient properties - - // awt - - // Infinite graphs. - removeProperty("java.awt.geom.RectangularShape", "frame"); - // removeProperty("java.awt.Rectangle2D", "frame"); - // removeProperty("java.awt.Rectangle", "frame"); - - removeProperty("java.awt.Rectangle", "bounds"); - removeProperty("java.awt.Dimension", "size"); - removeProperty("java.awt.Point", "location"); - - // The color and font properties in Component need special treatment, see above. - removeProperty("java.awt.Component", "foreground"); - removeProperty("java.awt.Component", "background"); - removeProperty("java.awt.Component", "font"); - - // The visible property of Component needs special treatment because of Windows. - removeProperty("java.awt.Component", "visible"); - - // This property throws an exception if accessed when there is no child. - removeProperty("java.awt.ScrollPane", "scrollPosition"); - - // 4917458 this should be removed for XAWT since it may throw - // an unsupported exception if there isn't any input methods. - // This shouldn't be a problem since these are added behind - // the scenes automatically. - removeProperty("java.awt.im.InputContext", "compositionEnabled"); - - // swing - - // The size properties in JComponent need special treatment, see above. - removeProperty("javax.swing.JComponent", "minimumSize"); - removeProperty("javax.swing.JComponent", "preferredSize"); - removeProperty("javax.swing.JComponent", "maximumSize"); - - // These properties have platform specific implementations - // and should not appear in archives. - removeProperty("javax.swing.ImageIcon", "image"); - removeProperty("javax.swing.ImageIcon", "imageObserver"); - - // This property unconditionally throws a "not implemented" exception. - removeProperty("javax.swing.JMenuBar", "helpMenu"); - - // The scrollBars in a JScrollPane are dynamic and should not - // be archived. The row and columns headers are changed by - // components like JTable on "addNotify". - removeProperty("javax.swing.JScrollPane", "verticalScrollBar"); - removeProperty("javax.swing.JScrollPane", "horizontalScrollBar"); - removeProperty("javax.swing.JScrollPane", "rowHeader"); - removeProperty("javax.swing.JScrollPane", "columnHeader"); - - removeProperty("javax.swing.JViewport", "extentSize"); - - // Renderers need special treatment, since their properties - // change during rendering. - removeProperty("javax.swing.table.JTableHeader", "defaultRenderer"); - removeProperty("javax.swing.JList", "cellRenderer"); - - removeProperty("javax.swing.JList", "selectedIndices"); - - // The lead and anchor selection indexes are best ignored. - // Selection is rarely something that should persist from - // development to deployment. - removeProperty("javax.swing.DefaultListSelectionModel", "leadSelectionIndex"); - removeProperty("javax.swing.DefaultListSelectionModel", "anchorSelectionIndex"); - - // The selection must come after the text itself. - removeProperty("javax.swing.JComboBox", "selectedIndex"); - - // All selection information should come after the JTabbedPane is built - removeProperty("javax.swing.JTabbedPane", "selectedIndex"); - removeProperty("javax.swing.JTabbedPane", "selectedComponent"); - - // PENDING: The "disabledIcon" property is often computed from the icon property. - removeProperty("javax.swing.AbstractButton", "disabledIcon"); - removeProperty("javax.swing.JLabel", "disabledIcon"); - - // The caret property throws errors when it it set beyond - // the extent of the text. We could just set it after the - // text, but this is probably not something we want to archive anyway. - removeProperty("javax.swing.text.JTextComponent", "caret"); - removeProperty("javax.swing.text.JTextComponent", "caretPosition"); - // The selectionStart must come after the text itself. - removeProperty("javax.swing.text.JTextComponent", "selectionStart"); - removeProperty("javax.swing.text.JTextComponent", "selectionEnd"); } /*pp*/ static boolean equals(Object o1, Object o2) { @@ -1509,18 +1420,6 @@ class MetaData { // } String typeName = type.getName(); - - // Check to see if there are properties that have been lazily registered for removal. - if (getBeanAttribute(type, "transient_init") == null) { - Vector tp = (Vector)transientProperties.get(typeName); - if (tp != null) { - for(int i = 0; i < tp.size(); i++) { - setPropertyAttribute(type, (String)tp.get(i), "transient", Boolean.TRUE); - } - } - setBeanAttribute(type, "transient_init", Boolean.TRUE); - } - PersistenceDelegate pd = (PersistenceDelegate)getBeanAttribute(type, "persistenceDelegate"); if (pd == null) { pd = (PersistenceDelegate)internalPersistenceDelegates.get(typeName); @@ -1583,55 +1482,11 @@ class MetaData { return true; } - // Wrapper for Introspector.getBeanInfo to handle exception handling. - // Note: this relys on new 1.4 Introspector semantics which cache the BeanInfos - public static BeanInfo getBeanInfo(Class type) { - BeanInfo info = null; - try { - info = Introspector.getBeanInfo(type); - } catch (Throwable e) { - e.printStackTrace(); - } - - return info; - } - - private static PropertyDescriptor getPropertyDescriptor(Class type, String propertyName) { - BeanInfo info = getBeanInfo(type); - PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors(); - // System.out.println("Searching for: " + propertyName + " in " + type); - for(int i = 0; i < propertyDescriptors.length; i++) { - PropertyDescriptor pd = propertyDescriptors[i]; - if (propertyName.equals(pd.getName())) { - return pd; - } - } - return null; - } - - private static void setPropertyAttribute(Class type, String property, String attribute, Object value) { - PropertyDescriptor pd = getPropertyDescriptor(type, property); - if (pd == null) { - System.err.println("Warning: property " + property + " is not defined on " + type); - return; - } - pd.setValue(attribute, value); - } - - private static void setBeanAttribute(Class type, String attribute, Object value) { - getBeanInfo(type).getBeanDescriptor().setValue(attribute, value); - } - private static Object getBeanAttribute(Class type, String attribute) { - return getBeanInfo(type).getBeanDescriptor().getValue(attribute); - } - - private static void removeProperty(String typeName, String property) { - Vector tp = (Vector)transientProperties.get(typeName); - if (tp == null) { - tp = new Vector(); - transientProperties.put(typeName, tp); + try { + return Introspector.getBeanInfo(type).getBeanDescriptor().getValue(attribute); + } catch (IntrospectionException exception) { + return null; } - tp.add(property); } } diff --git a/jdk/src/share/classes/java/beans/PropertyDescriptor.java b/jdk/src/share/classes/java/beans/PropertyDescriptor.java index 775b213c31d..08ae9a45f42 100644 --- a/jdk/src/share/classes/java/beans/PropertyDescriptor.java +++ b/jdk/src/share/classes/java/beans/PropertyDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright 1996-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-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 @@ -256,6 +256,7 @@ public class PropertyDescriptor extends FeatureDescriptor { readMethodName = readMethod.getName(); this.readMethodRef = getSoftReference(readMethod); + setTransient(readMethod.getAnnotation(Transient.class)); } /** @@ -320,7 +321,7 @@ public class PropertyDescriptor extends FeatureDescriptor { writeMethodName = writeMethod.getName(); this.writeMethodRef = getSoftReference(writeMethod); - + setTransient(writeMethod.getAnnotation(Transient.class)); } private Method getReadMethod0() { diff --git a/jdk/src/share/classes/java/beans/Transient.java b/jdk/src/share/classes/java/beans/Transient.java new file mode 100644 index 00000000000..302152e7cb9 --- /dev/null +++ b/jdk/src/share/classes/java/beans/Transient.java @@ -0,0 +1,68 @@ +/* + * 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. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * 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. + */ + +package java.beans; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Indicates that an attribute called "transient" + * should be declared with the given {@code value} + * when the {@link Introspector} constructs + * a {@link PropertyDescriptor} or {@link EventSetDescriptor} + * classes associated with the annotated code element. + * A {@code true} value for the "transient" attribute + * indicates to encoders derived from {@link Encoder} + * that this feature should be ignored. + *

    + * The {@code Transient} annotation may be be used + * in any of the methods that are involved + * in a {@link FeatureDescriptor} subclass + * to identify the transient feature in the annotated class and its subclasses. + * Normally, the method that starts with "get" is the best place + * to put the annotation and it is this declaration + * that takes precedence in the case of multiple annotations + * being defined for the same feature. + *

    + * To declare a feature non-transient in a class + * whose superclass declares it transient, + * use {@code @Transient(false)}. + * In all cases, the {@link Introspector} decides + * if a feature is transient by referring to the annotation + * on the most specific superclass. + * If no {@code Transient} annotation is present + * in any superclass the feature is not transient. + * + * @since 1.7 + */ +@Target({METHOD}) +@Retention(RUNTIME) +public @interface Transient { + boolean value() default true; +} diff --git a/jdk/src/share/classes/javax/swing/AbstractButton.java b/jdk/src/share/classes/javax/swing/AbstractButton.java index b4d4ae1e29a..53cb6139c99 100644 --- a/jdk/src/share/classes/javax/swing/AbstractButton.java +++ b/jdk/src/share/classes/javax/swing/AbstractButton.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -29,7 +29,9 @@ import java.awt.event.*; import java.awt.image.*; import java.text.*; import java.awt.geom.*; -import java.beans.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.Transient; import java.util.Enumeration; import java.util.Vector; import java.io.Serializable; @@ -645,6 +647,7 @@ public abstract class AbstractButton extends JComponent implements ItemSelectabl * @see #setDisabledIcon * @see javax.swing.LookAndFeel#getDisabledIcon */ + @Transient public Icon getDisabledIcon() { if (disabledIcon == null) { disabledIcon = UIManager.getLookAndFeel().getDisabledIcon(this, getIcon()); diff --git a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java index 78caa194139..329fa38b44a 100644 --- a/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java +++ b/jdk/src/share/classes/javax/swing/DefaultListSelectionModel.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -28,6 +28,7 @@ package javax.swing; import java.util.EventListener; import java.util.BitSet; import java.io.Serializable; +import java.beans.Transient; import javax.swing.event.*; @@ -714,11 +715,13 @@ public class DefaultListSelectionModel implements ListSelectionModel, Cloneable, } /** {@inheritDoc} */ + @Transient public int getAnchorSelectionIndex() { return anchorIndex; } /** {@inheritDoc} */ + @Transient public int getLeadSelectionIndex() { return leadIndex; } diff --git a/jdk/src/share/classes/javax/swing/ImageIcon.java b/jdk/src/share/classes/javax/swing/ImageIcon.java index 38a9f22f224..74788f1a803 100644 --- a/jdk/src/share/classes/javax/swing/ImageIcon.java +++ b/jdk/src/share/classes/javax/swing/ImageIcon.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -27,6 +27,7 @@ package javax.swing; import java.awt.*; import java.awt.image.*; import java.beans.ConstructorProperties; +import java.beans.Transient; import java.net.URL; import java.io.Serializable; @@ -336,6 +337,7 @@ public class ImageIcon implements Icon, Serializable, Accessible { * Returns this icon's Image. * @return the Image object for this ImageIcon */ + @Transient public Image getImage() { return image; } @@ -436,6 +438,7 @@ public class ImageIcon implements Icon, Serializable, Accessible { * * @return the image observer, which may be null */ + @Transient public ImageObserver getImageObserver() { return imageObserver; } diff --git a/jdk/src/share/classes/javax/swing/JComboBox.java b/jdk/src/share/classes/javax/swing/JComboBox.java index a4d92427eea..2230147f4a9 100644 --- a/jdk/src/share/classes/javax/swing/JComboBox.java +++ b/jdk/src/share/classes/javax/swing/JComboBox.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -24,7 +24,9 @@ */ package javax.swing; -import java.beans.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.Transient; import java.util.*; import java.awt.*; @@ -636,6 +638,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { * or -1 if no item is selected or if * the currently selected item is not in the list */ + @Transient public int getSelectedIndex() { Object sObject = dataModel.getSelectedItem(); int i,c; diff --git a/jdk/src/share/classes/javax/swing/JComponent.java b/jdk/src/share/classes/javax/swing/JComponent.java index d26ec12ebd6..7d3881a1c05 100644 --- a/jdk/src/share/classes/javax/swing/JComponent.java +++ b/jdk/src/share/classes/javax/swing/JComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -43,7 +43,10 @@ import java.awt.Graphics2D; import java.awt.peer.LightweightPeer; import java.awt.dnd.DropTarget; import java.awt.font.FontRenderContext; -import java.beans.*; +import java.beans.PropertyChangeListener; +import java.beans.VetoableChangeListener; +import java.beans.VetoableChangeSupport; +import java.beans.Transient; import java.applet.Applet; @@ -1634,6 +1637,7 @@ public abstract class JComponent extends Container implements Serializable, * @see #setPreferredSize * @see ComponentUI */ + @Transient public Dimension getPreferredSize() { if (isPreferredSizeSet()) { return super.getPreferredSize(); @@ -1675,6 +1679,7 @@ public abstract class JComponent extends Container implements Serializable, * @see #setMaximumSize * @see ComponentUI */ + @Transient public Dimension getMaximumSize() { if (isMaximumSizeSet()) { return super.getMaximumSize(); @@ -1714,6 +1719,7 @@ public abstract class JComponent extends Container implements Serializable, * @see #setMinimumSize * @see ComponentUI */ + @Transient public Dimension getMinimumSize() { if (isMinimumSizeSet()) { return super.getMinimumSize(); diff --git a/jdk/src/share/classes/javax/swing/JLabel.java b/jdk/src/share/classes/javax/swing/JLabel.java index 1d51add5cac..417892a8323 100644 --- a/jdk/src/share/classes/javax/swing/JLabel.java +++ b/jdk/src/share/classes/javax/swing/JLabel.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -31,6 +31,7 @@ import java.awt.Image; import java.awt.*; import java.text.*; import java.awt.geom.*; +import java.beans.Transient; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; @@ -422,6 +423,7 @@ public class JLabel extends JComponent implements SwingConstants, Accessible * @see javax.swing.LookAndFeel#getDisabledIcon * @see ImageIcon */ + @Transient public Icon getDisabledIcon() { if (!disabledIconSet && disabledIcon == null && defaultIcon != null) { disabledIcon = UIManager.getLookAndFeel().getDisabledIcon(this, defaultIcon); diff --git a/jdk/src/share/classes/javax/swing/JList.java b/jdk/src/share/classes/javax/swing/JList.java index 8446d05a88b..a83a4c94e4c 100644 --- a/jdk/src/share/classes/javax/swing/JList.java +++ b/jdk/src/share/classes/javax/swing/JList.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -31,7 +31,9 @@ import java.awt.*; import java.util.Vector; import java.util.Locale; -import java.beans.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.Transient; import javax.swing.event.*; import javax.accessibility.*; @@ -724,6 +726,7 @@ public class JList extends JComponent implements Scrollable, Accessible * @return the value of the {@code cellRenderer} property * @see #setCellRenderer */ + @Transient public ListCellRenderer getCellRenderer() { return cellRenderer; } @@ -2153,6 +2156,7 @@ public class JList extends JComponent implements Scrollable, Accessible * @see #removeSelectionInterval * @see #addListSelectionListener */ + @Transient public int[] getSelectedIndices() { ListSelectionModel sm = getSelectionModel(); int iMin = sm.getMinSelectionIndex(); diff --git a/jdk/src/share/classes/javax/swing/JMenuBar.java b/jdk/src/share/classes/javax/swing/JMenuBar.java index f10a84bf34d..d6f04fbb427 100644 --- a/jdk/src/share/classes/javax/swing/JMenuBar.java +++ b/jdk/src/share/classes/javax/swing/JMenuBar.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -32,6 +32,7 @@ import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.*; +import java.beans.Transient; import java.util.Vector; import java.util.Enumeration; @@ -236,6 +237,7 @@ public class JMenuBar extends JComponent implements Accessible,MenuElement * * @return the JMenu that delivers help to the user */ + @Transient public JMenu getHelpMenu() { throw new Error("getHelpMenu() not yet implemented."); } diff --git a/jdk/src/share/classes/javax/swing/JScrollPane.java b/jdk/src/share/classes/javax/swing/JScrollPane.java index 1db9e459f0c..13c1365c025 100644 --- a/jdk/src/share/classes/javax/swing/JScrollPane.java +++ b/jdk/src/share/classes/javax/swing/JScrollPane.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -43,8 +43,9 @@ import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.io.IOException; -import java.beans.*; - +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.Transient; /** * Provides a scrollable view of a lightweight component. @@ -822,6 +823,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * @return the horizontalScrollBar property * @see #setHorizontalScrollBar */ + @Transient public JScrollBar getHorizontalScrollBar() { return horizontalScrollBar; } @@ -880,6 +882,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * @return the verticalScrollBar property * @see #setVerticalScrollBar */ + @Transient public JScrollBar getVerticalScrollBar() { return verticalScrollBar; } @@ -1012,6 +1015,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * @return the rowHeader property * @see #setRowHeader */ + @Transient public JViewport getRowHeader() { return rowHeader; } @@ -1081,6 +1085,7 @@ public class JScrollPane extends JComponent implements ScrollPaneConstants, Acce * @return the columnHeader property * @see #setColumnHeader */ + @Transient public JViewport getColumnHeader() { return columnHeader; } diff --git a/jdk/src/share/classes/javax/swing/JTabbedPane.java b/jdk/src/share/classes/javax/swing/JTabbedPane.java index defffc711a4..706fc3732db 100644 --- a/jdk/src/share/classes/javax/swing/JTabbedPane.java +++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -27,7 +27,7 @@ package javax.swing; import java.awt.*; import java.awt.event.*; -import java.beans.*; +import java.beans.Transient; import java.util.*; import javax.swing.event.*; import javax.swing.plaf.*; @@ -563,6 +563,7 @@ public class JTabbedPane extends JComponent * @return the index of the selected tab * @see #setSelectedIndex */ + @Transient public int getSelectedIndex() { return model.getSelectedIndex(); } @@ -648,6 +649,7 @@ public class JTabbedPane extends JComponent * @return the component corresponding to the selected tab * @see #setSelectedComponent */ + @Transient public Component getSelectedComponent() { int index = getSelectedIndex(); if (index == -1) { diff --git a/jdk/src/share/classes/javax/swing/JViewport.java b/jdk/src/share/classes/javax/swing/JViewport.java index 1825c79017e..f5a16bbd2c6 100644 --- a/jdk/src/share/classes/javax/swing/JViewport.java +++ b/jdk/src/share/classes/javax/swing/JViewport.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -30,6 +30,7 @@ import java.awt.event.*; import java.awt.image.VolatileImage; import java.awt.peer.ComponentPeer; import java.applet.Applet; +import java.beans.Transient; import javax.swing.plaf.ViewportUI; import javax.swing.event.*; @@ -1257,6 +1258,7 @@ public class JViewport extends JComponent implements Accessible * * @return a Dimension object giving the size of the view */ + @Transient public Dimension getExtentSize() { return getSize(); } diff --git a/jdk/src/share/classes/javax/swing/table/JTableHeader.java b/jdk/src/share/classes/javax/swing/table/JTableHeader.java index fb99e058d78..78099608949 100644 --- a/jdk/src/share/classes/javax/swing/table/JTableHeader.java +++ b/jdk/src/share/classes/javax/swing/table/JTableHeader.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -37,6 +37,7 @@ import javax.swing.plaf.*; import javax.accessibility.*; import java.beans.PropertyChangeListener; +import java.beans.Transient; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; @@ -325,6 +326,7 @@ public class JTableHeader extends JComponent implements TableColumnModelListener * @return the default renderer * @since 1.3 */ + @Transient public TableCellRenderer getDefaultRenderer() { return defaultRenderer; } diff --git a/jdk/src/share/classes/javax/swing/text/JTextComponent.java b/jdk/src/share/classes/javax/swing/text/JTextComponent.java index d340f281eff..e4531003597 100644 --- a/jdk/src/share/classes/javax/swing/text/JTextComponent.java +++ b/jdk/src/share/classes/javax/swing/text/JTextComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -29,6 +29,7 @@ import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedAction; +import java.beans.Transient; import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; @@ -571,6 +572,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * * @return the caret */ + @Transient public Caret getCaret() { return caret; } @@ -1672,6 +1674,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * @return the position of the text insertion caret for the * text component >= 0 */ + @Transient public int getCaretPosition() { return caret.getDot(); } @@ -1797,6 +1800,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * * @return the start position >= 0 */ + @Transient public int getSelectionStart() { int start = Math.min(caret.getDot(), caret.getMark()); return start; @@ -1829,6 +1833,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A * * @return the end position >= 0 */ + @Transient public int getSelectionEnd() { int end = Math.max(caret.getDot(), caret.getMark()); return end; diff --git a/jdk/test/java/beans/Introspector/BeanUtils.java b/jdk/test/java/beans/Introspector/BeanUtils.java index 4b1e7633541..63c58195218 100644 --- a/jdk/test/java/beans/Introspector/BeanUtils.java +++ b/jdk/test/java/beans/Introspector/BeanUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-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 @@ -21,6 +21,7 @@ * have any questions. */ +import java.beans.BeanDescriptor; import java.beans.EventSetDescriptor; import java.beans.IndexedPropertyDescriptor; import java.beans.IntrospectionException; @@ -38,6 +39,20 @@ public final class BeanUtils { private BeanUtils() { } + /** + * Returns a bean descriptor for specified class. + * + * @param type the class to introspect + * @return a bean descriptor + */ + public static BeanDescriptor getBeanDescriptor(Class type) { + try { + return Introspector.getBeanInfo(type).getBeanDescriptor(); + } catch (IntrospectionException exception) { + throw new Error("unexpected exception", exception); + } + } + /** * Returns an array of property descriptors for specified class. * @@ -45,7 +60,6 @@ public final class BeanUtils { * @return an array of property descriptors */ public static PropertyDescriptor[] getPropertyDescriptors(Class type) { - System.out.println(type); try { return Introspector.getBeanInfo(type).getPropertyDescriptors(); } catch (IntrospectionException exception) { @@ -53,6 +67,38 @@ public final class BeanUtils { } } + /** + * Returns an array of event set descriptors for specified class. + * + * @param type the class to introspect + * @return an array of event set descriptors + */ + public static EventSetDescriptor[] getEventSetDescriptors(Class type) { + try { + return Introspector.getBeanInfo(type).getEventSetDescriptors(); + } catch (IntrospectionException exception) { + throw new Error("unexpected exception", exception); + } + } + + /** + * Finds an event set descriptor for the class + * that matches the event set name. + * + * @param type the class to introspect + * @param name the name of the event set to search + * @return the {@code EventSetDescriptor} or {@code null} + */ + public static EventSetDescriptor findEventSetDescriptor(Class type, String name) { + EventSetDescriptor[] esds = getEventSetDescriptors(type); + for (EventSetDescriptor esd : esds) { + if (esd.getName().equals(name)) { + return esd; + } + } + return null; + } + /** * Finds a property descriptor for the class * that matches the property name. @@ -71,6 +117,22 @@ public final class BeanUtils { return null; } + /** + * Returns a event set descriptor for the class + * that matches the property name. + * + * @param type the class to introspect + * @param name the name of the event set to search + * @return the {@code EventSetDescriptor} + */ + public static EventSetDescriptor getEventSetDescriptor(Class type, String name) { + EventSetDescriptor esd = findEventSetDescriptor(type, name); + if (esd != null) { + return esd; + } + throw new Error("could not find event set '" + name + "' in " + type); + } + /** * Returns a property descriptor for the class * that matches the property name. diff --git a/jdk/test/java/beans/Introspector/Test4896879.java b/jdk/test/java/beans/Introspector/Test4896879.java index 8ccab4d54d4..2423841c798 100644 --- a/jdk/test/java/beans/Introspector/Test4896879.java +++ b/jdk/test/java/beans/Introspector/Test4896879.java @@ -28,22 +28,16 @@ * @author Mark Davidson */ -import java.beans.BeanInfo; -import java.beans.EventSetDescriptor; -import java.beans.IntrospectionException; -import java.beans.Introspector; import java.util.EventListener; public class Test4896879 { - public static void main(String[] args) throws IntrospectionException { + public static void main(String[] args) { test(A.class); test(B.class); } - private static void test(Class type) throws IntrospectionException { - BeanInfo info = Introspector.getBeanInfo(type); - EventSetDescriptor[] descriptors = info.getEventSetDescriptors(); - if (descriptors.length != 0) { + private static void test(Class type) { + if (BeanUtils.getEventSetDescriptors(type).length != 0) { throw new Error("Should not have any EventSetDescriptors"); } } diff --git a/jdk/test/java/beans/Introspector/Test4935607.java b/jdk/test/java/beans/Introspector/Test4935607.java new file mode 100644 index 00000000000..7ce48c9b6c8 --- /dev/null +++ b/jdk/test/java/beans/Introspector/Test4935607.java @@ -0,0 +1,404 @@ +/* + * 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 %I% %G% + * @bug 4935607 + * @summary Tests transient properties + * @author Sergey Malenkov + */ + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.ScrollPane; +import java.awt.geom.RectangularShape; +import java.awt.im.InputContext; + +import java.beans.FeatureDescriptor; +import java.beans.Transient; + +import java.util.EventListener; + +import javax.swing.AbstractButton; +import javax.swing.DefaultListSelectionModel; +import javax.swing.ImageIcon; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JMenuBar; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JViewport; +import javax.swing.table.JTableHeader; +import javax.swing.text.JTextComponent; + +public class Test4935607 { + public static void main(String[] args) { + // test all possible cases + test(Null.class); + test(True.class); + test(False.class); + test(NullNull.class); + test(TrueNull.class); + test(FalseNull.class); + test(NullTrue.class); + test(TrueTrue.class); + test(FalseTrue.class); + test(NullFalse.class); + test(TrueFalse.class); + test(FalseFalse.class); + // test transient properties in AWT + test(RectangularShape.class, "frame"); // NON-NLS: getFrame() + test(Rectangle.class, "bounds"); // NON-NLS: getBounds() + test(Dimension.class, "size"); // NON-NLS: getSize() + test(Point.class, "location"); // NON-NLS: getLocation() + test(Component.class, "foreground"); // NON-NLS: getForeground() + test(Component.class, "background"); // NON-NLS: getBackground() + test(Component.class, "font"); // NON-NLS: getFont() + test(Component.class, "visible"); // NON-NLS: getVisible() + test(ScrollPane.class, "scrollPosition"); // NON-NLS: getScrollPosition() + test(InputContext.class, "compositionEnabled"); // NON-NLS: getCompositionEnabled() + // test transient properties in Swing + test(JComponent.class, "minimumSize"); // NON-NLS: getMinimumSize() + test(JComponent.class, "preferredSize"); // NON-NLS: getPreferredSize() + test(JComponent.class, "maximumSize"); // NON-NLS: getMaximumSize() + test(ImageIcon.class, "image"); // NON-NLS: getImage() + test(ImageIcon.class, "imageObserver"); // NON-NLS: getImageObserver() + test(JMenuBar.class, "helpMenu"); // NON-NLS: getHelpMenu() + test(JScrollPane.class, "verticalScrollBar"); // NON-NLS: getVerticalScrollBar() + test(JScrollPane.class, "horizontalScrollBar"); // NON-NLS: getHorizontalScrollBar() + test(JScrollPane.class, "rowHeader"); // NON-NLS: getRowHeader() + test(JScrollPane.class, "columnHeader"); // NON-NLS: getColumnHeader() + test(JViewport.class, "extentSize"); // NON-NLS: getExtentSize() + test(JTableHeader.class, "defaultRenderer"); // NON-NLS: getDefaultRenderer() + test(JList.class, "cellRenderer"); // NON-NLS: getCellRenderer() + test(JList.class, "selectedIndices"); // NON-NLS: getSelectedIndices() + test(DefaultListSelectionModel.class, "leadSelectionIndex"); // NON-NLS: getLeadSelectionIndex() + test(DefaultListSelectionModel.class, "anchorSelectionIndex"); // NON-NLS: getAnchorSelectionIndex() + test(JComboBox.class, "selectedIndex"); // NON-NLS: getSelectedIndex() + test(JTabbedPane.class, "selectedIndex"); // NON-NLS: getSelectedIndex() + test(JTabbedPane.class, "selectedComponent"); // NON-NLS: getSelectedComponent() + test(AbstractButton.class, "disabledIcon"); // NON-NLS: getDisabledIcon() + test(JLabel.class, "disabledIcon"); // NON-NLS: getDisabledIcon() + test(JTextComponent.class, "caret"); // NON-NLS: getCaret() + test(JTextComponent.class, "caretPosition"); // NON-NLS: getCaretPosition() + test(JTextComponent.class, "selectionStart"); // NON-NLS: getSelectionStart() + test(JTextComponent.class, "selectionEnd"); // NON-NLS: getSelectionEnd() + } + + private static void test(Class type) { + Object value = getExpectedValue(type); + test(value, BeanUtils.getPropertyDescriptor(type, "property")); // NON-NLS: the property to check + test(value, BeanUtils.getEventSetDescriptor(type, "eventSet")); // NON-NLS: the event set to check + System.out.println(); + } + + private static void test(Class type, String property) { + System.out.print(type.getName() + ": "); + test(Boolean.TRUE, BeanUtils.getPropertyDescriptor(type, property)); + } + + private static void test(Object expected, FeatureDescriptor fd) { + System.out.println(fd.getName()); + Object actual = fd.getValue("transient"); // NON-NLS: the attribute name + if ((actual == null) ? (expected != null) : !actual.equals(expected)) + throw new Error("expected " + expected + " value, but actual value is " + actual); + } + + private static Object getExpectedValue(Class type) { + try { + return type.getField("VALUE").get(type); // NON-NLS: the field name with expected value + } catch (NoSuchFieldException exception) { + return null; + } catch (IllegalAccessException exception) { + throw new Error("unexpected error", exception); + } + } + + + public static class Null { + public Object getProperty() { + return this; + } + + public void setProperty(Object object) { + } + + public void addEventSetListener(EventSetListener listener) { + } + + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class True { + public static final Boolean VALUE = Boolean.TRUE; + + @Transient + public Object getProperty() { + return this; + } + + @Transient + public void setProperty(Object object) { + } + + @Transient + public void addEventSetListener(EventSetListener listener) { + } + + @Transient + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class False { + public static final Boolean VALUE = Boolean.FALSE; + + @Transient(false) + public Object getProperty() { + return this; + } + + @Transient(false) + public void setProperty(Object object) { + } + + @Transient(false) + public void addEventSetListener(EventSetListener listener) { + } + + @Transient(false) + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class NullNull extends Null { + @Override + public Object getProperty() { + return this; + } + + @Override + public void setProperty(Object object) { + } + + @Override + public void addEventSetListener(EventSetListener listener) { + } + + @Override + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class TrueNull extends Null { + public static final Boolean VALUE = Boolean.TRUE; + + @Override + @Transient + public Object getProperty() { + return this; + } + + @Override + @Transient + public void setProperty(Object object) { + } + + @Override + @Transient + public void addEventSetListener(EventSetListener listener) { + } + + @Override + @Transient + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class FalseNull extends Null { + public static final Boolean VALUE = Boolean.FALSE; + + @Override + @Transient(false) + public Object getProperty() { + return this; + } + + @Override + @Transient(false) + public void setProperty(Object object) { + } + + @Override + @Transient(false) + public void addEventSetListener(EventSetListener listener) { + } + + @Override + @Transient(false) + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class NullTrue extends True { + @Override + public Object getProperty() { + return this; + } + + @Override + public void setProperty(Object object) { + } + + @Override + public void addEventSetListener(EventSetListener listener) { + } + + @Override + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class TrueTrue extends True { + @Override + @Transient + public Object getProperty() { + return this; + } + + @Override + @Transient + public void setProperty(Object object) { + } + + @Override + @Transient + public void addEventSetListener(EventSetListener listener) { + } + + @Override + @Transient + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class FalseTrue extends True { + public static final Boolean VALUE = Boolean.FALSE; + + @Override + @Transient(false) + public Object getProperty() { + return this; + } + + @Override + @Transient(false) + public void setProperty(Object object) { + } + + @Override + @Transient(false) + public void addEventSetListener(EventSetListener listener) { + } + + @Override + @Transient(false) + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class NullFalse extends False { + @Override + public Object getProperty() { + return this; + } + + @Override + public void setProperty(Object object) { + } + + @Override + public void addEventSetListener(EventSetListener listener) { + } + + @Override + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class TrueFalse extends False { + public static final Boolean VALUE = Boolean.TRUE; + + @Override + @Transient + public Object getProperty() { + return this; + } + + @Override + @Transient + public void setProperty(Object object) { + } + + @Override + @Transient + public void addEventSetListener(EventSetListener listener) { + } + + @Override + @Transient + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static class FalseFalse extends False { + @Override + @Transient(false) + public Object getProperty() { + return this; + } + + @Override + @Transient(false) + public void setProperty(Object object) { + } + + @Override + @Transient(false) + public void addEventSetListener(EventSetListener listener) { + } + + @Override + @Transient(false) + public void removeEventSetListener(EventSetListener listener) { + } + } + + public static final class EventSetListener implements EventListener { + } +} diff --git a/jdk/test/java/beans/XMLEncoder/Test4935607.java b/jdk/test/java/beans/XMLEncoder/Test4935607.java new file mode 100644 index 00000000000..3d5e70e6df1 --- /dev/null +++ b/jdk/test/java/beans/XMLEncoder/Test4935607.java @@ -0,0 +1,83 @@ +/* + * 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 %I% %G% + * @bug 4935607 + * @summary Tests transient properties + * @author Sergey Malenkov + */ + +import java.beans.Transient; + +public class Test4935607 extends AbstractTest { + public static void main(String[] args) { + new Test4935607().test(true); + } + + @Override + protected TransientBean getObject() { + TransientBean bean = new TransientBean(); + bean.setName("some string"); // NON-NLS: some string + return bean; + } + + @Override + protected TransientBean getAnotherObject() { + TransientBean bean = new TransientBean(); + bean.setName("another string"); // NON-NLS: another string + bean.setComment("some comment"); // NON-NLS: some comment + return bean; + } + + @Override + protected void validate(TransientBean before, TransientBean after) { + if (!before.getName().equals(after.getName())) + throw new Error("the name property incorrectly encoded"); + + if (null != after.getComment()) + throw new Error("the comment property should be encoded"); + } + + public static class TransientBean { + private String name; + private String comment; + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + @Transient + public String getComment() { + return this.comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + } +}