From 1f1d82e2aaf3960f1ddcd601d86cf85258c6d05a Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Mon, 24 Mar 2008 15:51:26 +0300 Subject: [PATCH 01/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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/27] 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 c54c100fd7e8b78559cea77ca008a7887292452b Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Fri, 4 Apr 2008 20:20:16 +0400 Subject: [PATCH 16/27] 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 0e36651f33707dfd5761bd2242b8793f24b6659e Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Mon, 7 Apr 2008 14:53:51 +0400 Subject: [PATCH 17/27] 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 18/27] 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 19/27] 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 20/27] 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 21/27] 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 74ae1c6b6548adc0b6c6fce65546904530a0dac1 Mon Sep 17 00:00:00 2001 From: Konstantin Voloshin Date: Sun, 13 Apr 2008 23:41:40 +0400 Subject: [PATCH 22/27] 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 23/27] 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 24/27] 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 bcbd82060a161bf84d65ab1397ee205e095d299b Mon Sep 17 00:00:00 2001 From: Andrei Dmitriev Date: Tue, 15 Apr 2008 14:00:29 +0400 Subject: [PATCH 25/27] 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 26/27] 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 9145169200e15c5545172c91f04c9089a6e4495c Mon Sep 17 00:00:00 2001 From: Yuri Nesterenko Date: Wed, 23 Apr 2008 14:35:26 +0400 Subject: [PATCH 27/27] 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));