diff --git a/.hgtags b/.hgtags index 6f8b44b7576bc22d1ad167bd84ad33d692d81e63..296cc4b01a89d29d8a0251a638b21d49de1ba7c4 100644 --- a/.hgtags +++ b/.hgtags @@ -158,3 +158,5 @@ ddfe5562f61f54ed2121ac0c73b688b94f3e66b5 jdk8-b32 29b680393f33bf953688c17d93aca7a870ca4024 jdk8-b34 2e3e1356ffbddb2ae95c08da72830ba9ab8b3181 jdk8-b35 45da9cb055ee258dc09e69c1718e27eadea38e45 jdk8-b36 +9e82ac15ab80370d6e021aea7b98c7c9626adb5e jdk8-b37 +c45f3509a70796c54b48f32910d1caf435763416 jdk8-b38 diff --git a/make/common/Release-macosx.gmk b/make/common/Release-macosx.gmk index 9235afa0eb8764b3f4314a6e23cdc2adca078215..f56370f3ca1f063dcd395e12ea7768b80730b497 100644 --- a/make/common/Release-macosx.gmk +++ b/make/common/Release-macosx.gmk @@ -29,14 +29,14 @@ JA_DIRNAME=ja_JP.UTF-8 # Defines the release targets for Mac OS X build products -JDK_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2sdk-bundle/$(THIS_JDK_VERSION).jdk/Contents -JRE_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2re-bundle/$(THIS_JDK_VERSION).jre/Contents +JDK_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2sdk-bundle/jdk$(JDK_VERSION).jdk/Contents +JRE_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2re-bundle/jre$(JDK_VERSION).jre/Contents MACOSX_SRC = $(JDK_TOPDIR)/src/macosx BUNDLE_ID ?= net.java.openjdk -BUNLDE_ID_JRE ?= $(BUNDLE_ID).jre -BUNLDE_ID_JDK ?= $(BUNDLE_ID).jdk +BUNDLE_ID_JRE ?= $(BUNDLE_ID).jre +BUNDLE_ID_JDK ?= $(BUNDLE_ID).jdk BUNDLE_NAME ?= OpenJDK $(JDK_MINOR_VERSION) BUNDLE_NAME_JRE ?= $(BUNDLE_NAME) diff --git a/src/macosx/bin/java_md_macosx.c b/src/macosx/bin/java_md_macosx.c index 14ae5318e3319a1b45d41730c9a2a77a9c1242d2..4fba1ede4b51159e3b0f5896ccdb15054daf5717 100644 --- a/src/macosx/bin/java_md_macosx.c +++ b/src/macosx/bin/java_md_macosx.c @@ -906,11 +906,41 @@ SetXDockArgForAWT(const char *arg) { char envVar[80]; if (strstr(arg, "-Xdock:name=") == arg) { + /* + * The APP_NAME_ environment variable is used to pass + * an application name as specified with the -Xdock:name command + * line option from Java launcher code to the AWT code in order + * to assign this name to the app's dock tile on the Mac. + * The _ part is added to avoid collisions with child processes. + * + * WARNING: This environment variable is an implementation detail and + * isn't meant for use outside of the core platform. The mechanism for + * passing this information from Java launcher to other modules may + * change drastically between update release, and it may even be + * removed or replaced with another mechanism. + * + * NOTE: It is used by SWT, and JavaFX. + */ snprintf(envVar, sizeof(envVar), "APP_NAME_%d", getpid()); setenv(envVar, (arg + 12), 1); } if (strstr(arg, "-Xdock:icon=") == arg) { + /* + * The APP_ICON_ environment variable is used to pass + * an application icon as specified with the -Xdock:icon command + * line option from Java launcher code to the AWT code in order + * to assign this icon to the app's dock tile on the Mac. + * The _ part is added to avoid collisions with child processes. + * + * WARNING: This environment variable is an implementation detail and + * isn't meant for use outside of the core platform. The mechanism for + * passing this information from Java launcher to other modules may + * change drastically between update release, and it may even be + * removed or replaced with another mechanism. + * + * NOTE: It is used by SWT, and JavaFX. + */ snprintf(envVar, sizeof(envVar), "APP_ICON_%d", getpid()); setenv(envVar, (arg + 12), 1); } @@ -931,6 +961,22 @@ SetMainClassForAWT(JNIEnv *env, jclass mainClass) { NULL_CHECK(mainClassName = (*env)->GetStringUTFChars(env, mainClassString, NULL)); char envVar[80]; + /* + * The JAVA_MAIN_CLASS_ environment variable is used to pass + * the name of a Java class whose main() method is invoked by + * the Java launcher code to start the application, to the AWT code + * in order to assign the name to the Apple menu bar when the app + * is active on the Mac. + * The _ part is added to avoid collisions with child processes. + * + * WARNING: This environment variable is an implementation detail and + * isn't meant for use outside of the core platform. The mechanism for + * passing this information from Java launcher to other modules may + * change drastically between update release, and it may even be + * removed or replaced with another mechanism. + * + * NOTE: It is used by SWT, and JavaFX. + */ snprintf(envVar, sizeof(envVar), "JAVA_MAIN_CLASS_%d", getpid()); setenv(envVar, mainClassName, 1); diff --git a/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java b/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java index e71ee173c508745b3c9d657966cfe46d011080c2..ebe97745d496ec1735f63401a86d25c13941e3ed 100644 --- a/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java +++ b/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java @@ -210,6 +210,15 @@ final class LWTextAreaPeer super(); } + @Override + public void replaceSelection(String content) { + getDocument().removeDocumentListener(LWTextAreaPeer.this); + super.replaceSelection(content); + // post only one text event in this case + postTextEvent(); + getDocument().addDocumentListener(LWTextAreaPeer.this); + } + @Override public boolean hasFocus() { return getTarget().hasFocus(); diff --git a/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java b/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java index acc2e298b9c6e861e5986d077e8dc83c924d423d..5884b11926173253441995dca041e0147cc17c63 100644 --- a/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java +++ b/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java @@ -187,7 +187,7 @@ abstract class LWTextComponentPeer @@ -35,6 +36,7 @@ static JNF_CLASS_CACHE(sjc_CPrinterJob, "sun/lwawt/macosx/CPrinterJob"); +static JNF_CLASS_CACHE(sjc_PageFormat, "java/awt/print/PageFormat"); @implementation PrinterView @@ -152,6 +154,7 @@ static JNF_CLASS_CACHE(sjc_CPrinterJob, "sun/lwawt/macosx/CPrinterJob"); static JNF_MEMBER_CACHE(jm_getPageformatPrintablePeekgraphics, sjc_CPrinterJob, "getPageformatPrintablePeekgraphics", "(I)[Ljava/lang/Object;"); static JNF_MEMBER_CACHE(jm_printAndGetPageFormatArea, sjc_CPrinterJob, "printAndGetPageFormatArea", "(Ljava/awt/print/Printable;Ljava/awt/Graphics;Ljava/awt/print/PageFormat;I)Ljava/awt/geom/Rectangle2D;"); + static JNF_MEMBER_CACHE(jm_getOrientation, sjc_PageFormat, "getOrientation", "()I"); // Assertions removed, and corresponding JNFDeleteGlobalRefs added, for radr://3962543 // Actual fix that will keep these assertions from being true is radr://3205462 , @@ -201,6 +204,26 @@ static JNF_CLASS_CACHE(sjc_CPrinterJob, "sun/lwawt/macosx/CPrinterJob"); // Actually print and get the PageFormatArea jobject pageFormatArea = JNFCallObjectMethod(env, fPrinterJob, jm_printAndGetPageFormatArea, fCurPainter, fCurPeekGraphics, fCurPageFormat, jPageNumber); // AWT_THREADING Safe (AWTRunLoopMode) if (pageFormatArea != NULL) { + NSPrintingOrientation currentOrientation = + [[[NSPrintOperation currentOperation] printInfo] orientation]; + // set page orientation + switch (JNFCallIntMethod(env, fCurPageFormat, jm_getOrientation)) { + case java_awt_print_PageFormat_PORTRAIT: + default: + if (currentOrientation != NSPortraitOrientation) { + [[[NSPrintOperation currentOperation] printInfo] + setOrientation:NSPortraitOrientation]; + } + break; + + case java_awt_print_PageFormat_LANDSCAPE: + case java_awt_print_PageFormat_REVERSE_LANDSCAPE: + if (currentOrientation != NSLandscapeOrientation) { + [[[NSPrintOperation currentOperation] printInfo] + setOrientation:NSLandscapeOrientation]; + } + break; + } result = JavaToNSRect(env, pageFormatArea); (*env)->DeleteLocalRef(env, pageFormatArea); } else { diff --git a/src/share/classes/javax/swing/JComponent.java b/src/share/classes/javax/swing/JComponent.java index 314a9315e4802f36db4b47e7d9ecaeaf034e0963..78bc5c4f64891230a6da8d873f9ffa70f665c46d 100644 --- a/src/share/classes/javax/swing/JComponent.java +++ b/src/share/classes/javax/swing/JComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2638,17 +2638,16 @@ public abstract class JComponent extends Container implements Serializable, * attribute: visualUpdate true */ public void setVisible(boolean aFlag) { - if(aFlag != isVisible()) { + if (aFlag != isVisible()) { super.setVisible(aFlag); - Container parent = getParent(); - if(parent != null) { - Rectangle r = getBounds(); - parent.repaint(r.x,r.y,r.width,r.height); + if (aFlag) { + Container parent = getParent(); + if (parent != null) { + Rectangle r = getBounds(); + parent.repaint(r.x, r.y, r.width, r.height); + } + revalidate(); } - // Some (all should) LayoutManagers do not consider components - // that are not visible. As such we need to revalidate when the - // visible bit changes. - revalidate(); } } @@ -5568,4 +5567,21 @@ public abstract class JComponent extends Container implements Serializable, ",preferredSize=" + preferredSizeString; } + /** + * {@inheritDoc} + */ + @Override + public void hide() { + boolean showing = isShowing(); + super.hide(); + if (showing) { + Container parent = getParent(); + if (parent != null) { + Rectangle r = getBounds(); + parent.repaint(r.x, r.y, r.width, r.height); + } + revalidate(); + } + } + } diff --git a/src/share/classes/javax/swing/JDesktopPane.java b/src/share/classes/javax/swing/JDesktopPane.java index 579d65af3d0334e1f995e4f94a8ed5d1e75d3547..85615d3d9592c7af504e1832dde298b9e5aa36c6 100644 --- a/src/share/classes/javax/swing/JDesktopPane.java +++ b/src/share/classes/javax/swing/JDesktopPane.java @@ -27,7 +27,8 @@ package javax.swing; import java.util.List; import java.util.ArrayList; -import java.util.Vector; +import java.util.Collection; +import java.util.Iterator; import javax.swing.plaf.*; import javax.accessibility.*; @@ -42,7 +43,6 @@ import java.io.IOException; import java.beans.PropertyVetoException; import java.util.Set; import java.util.TreeSet; - /** * A container used to create a multiple-document interface or a virtual desktop. * You create JInternalFrame objects and add them to the @@ -261,25 +261,26 @@ public class JDesktopPane extends JLayeredPane implements Accessible * @return an array of JInternalFrame objects */ public JInternalFrame[] getAllFrames() { + return getAllFrames(this).toArray(new JInternalFrame[0]); + } + + private static Collection getAllFrames(Container parent) { int i, count; - JInternalFrame[] results; - Vector vResults = new Vector(10); - - count = getComponentCount(); - for(i = 0; i < count; i++) { - Component next = getComponent(i); - if(next instanceof JInternalFrame) - vResults.addElement((JInternalFrame) next); - else if(next instanceof JInternalFrame.JDesktopIcon) { - JInternalFrame tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame(); - if(tmp != null) - vResults.addElement(tmp); + Collection results = new ArrayList(); + count = parent.getComponentCount(); + for (i = 0; i < count; i++) { + Component next = parent.getComponent(i); + if (next instanceof JInternalFrame) { + results.add((JInternalFrame) next); + } else if (next instanceof JInternalFrame.JDesktopIcon) { + JInternalFrame tmp = ((JInternalFrame.JDesktopIcon) next).getInternalFrame(); + if (tmp != null) { + results.add(tmp); + } + } else if (next instanceof Container) { + results.addAll(getAllFrames((Container) next)); } } - - results = new JInternalFrame[vResults.size()]; - vResults.copyInto(results); - return results; } @@ -322,27 +323,14 @@ public class JDesktopPane extends JLayeredPane implements Accessible * @see JLayeredPane */ public JInternalFrame[] getAllFramesInLayer(int layer) { - int i, count; - JInternalFrame[] results; - Vector vResults = new Vector(10); - - count = getComponentCount(); - for(i = 0; i < count; i++) { - Component next = getComponent(i); - if(next instanceof JInternalFrame) { - if(((JInternalFrame)next).getLayer() == layer) - vResults.addElement((JInternalFrame) next); - } else if(next instanceof JInternalFrame.JDesktopIcon) { - JInternalFrame tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame(); - if(tmp != null && tmp.getLayer() == layer) - vResults.addElement(tmp); + Collection allFrames = getAllFrames(this); + Iterator iterator = allFrames.iterator(); + while (iterator.hasNext()) { + if (iterator.next().getLayer() != layer) { + iterator.remove(); } } - - results = new JInternalFrame[vResults.size()]; - vResults.copyInto(results); - - return results; + return allFrames.toArray(new JInternalFrame[0]); } private List getFrames() { diff --git a/src/share/classes/javax/swing/JPopupMenu.java b/src/share/classes/javax/swing/JPopupMenu.java index 01763f666a960956124f25c1969b731798ad7e9d..7564b9f2075d364ecc3c380c3083a96cc0590eaa 100644 --- a/src/share/classes/javax/swing/JPopupMenu.java +++ b/src/share/classes/javax/swing/JPopupMenu.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * 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,6 +41,8 @@ import javax.swing.plaf.PopupMenuUI; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicComboPopup; import javax.swing.event.*; + +import sun.awt.SunToolkit; import sun.security.util.SecurityConstants; import java.applet.Applet; @@ -347,6 +349,7 @@ public class JPopupMenu extends JComponent implements Accessible,MenuElement { long popupBottomY = (long)popupLocation.y + (long)popupSize.height; int scrWidth = scrBounds.width; int scrHeight = scrBounds.height; + if (!canPopupOverlapTaskBar()) { // Insets include the task bar. Take them into account. Insets scrInsets = toolkit.getScreenInsets(gc); @@ -407,25 +410,19 @@ public class JPopupMenu extends JComponent implements Accessible,MenuElement { } /** - * Checks that there are enough security permissions - * to make popup "always on top", which allows to show it above the task bar. + * Returns whether popup is allowed to be shown above the task bar. */ static boolean canPopupOverlapTaskBar() { boolean result = true; - try { - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - sm.checkPermission( - SecurityConstants.AWT.SET_WINDOW_ALWAYS_ON_TOP_PERMISSION); - } - } catch (SecurityException se) { - // There is no permission to show popups over the task bar - result = false; + + Toolkit tk = Toolkit.getDefaultToolkit(); + if (tk instanceof SunToolkit) { + result = ((SunToolkit)tk).canPopupOverlapTaskBar(); } + return result; } - /** * Factory method which creates the JMenuItem for * Actions added to the JPopupMenu. diff --git a/src/share/classes/javax/swing/JTable.java b/src/share/classes/javax/swing/JTable.java index 6314cb0a2075266781482c8b7db5d18b636c4a5a..17b6b23d1354ca4b07bf901dd48808ff975d4e6a 100644 --- a/src/share/classes/javax/swing/JTable.java +++ b/src/share/classes/javax/swing/JTable.java @@ -5470,7 +5470,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable if (constructor.getDeclaringClass() == String.class) { value = s; } - super.stopCellEditing(); + return super.stopCellEditing(); } try { diff --git a/src/share/classes/sun/awt/SunToolkit.java b/src/share/classes/sun/awt/SunToolkit.java index 19cfdf417115fe18693e30ea93b4b1295bbe233e..b63403961a696bb16c21b15dab1c75b8fb2a0905 100644 --- a/src/share/classes/sun/awt/SunToolkit.java +++ b/src/share/classes/sun/awt/SunToolkit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * 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,6 +42,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; + +import sun.security.util.SecurityConstants; import sun.util.logging.PlatformLogger; import sun.misc.SoftCache; import sun.font.FontDesignMetrics; @@ -1135,6 +1137,26 @@ public abstract class SunToolkit extends Toolkit return ((mods & InputEvent.ALT_MASK) == (mods & InputEvent.CTRL_MASK)); } + /** + * Returns whether popup is allowed to be shown above the task bar. + * This is a default implementation of this method, which checks + * corresponding security permission. + */ + public boolean canPopupOverlapTaskBar() { + boolean result = true; + try { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.checkPermission( + SecurityConstants.AWT.SET_WINDOW_ALWAYS_ON_TOP_PERMISSION); + } + } catch (SecurityException se) { + // There is no permission to show popups over the task bar + result = false; + } + return result; + } + /** * Returns a new input method window, with behavior as specified in * {@link java.awt.im.spi.InputMethodContext#createInputMethodWindow}. diff --git a/src/share/classes/sun/print/ServiceDialog.java b/src/share/classes/sun/print/ServiceDialog.java index 9d2da0c7c914a582851e8204ce5fd6cefee71046..136b40e487be66b0d52c4c616b518019212bc930 100644 --- a/src/share/classes/sun/print/ServiceDialog.java +++ b/src/share/classes/sun/print/ServiceDialog.java @@ -72,6 +72,7 @@ import javax.swing.text.NumberFormatter; import sun.print.SunPageSelection; import java.awt.event.KeyEvent; import java.net.URISyntaxException; +import java.lang.reflect.Field; /** @@ -479,20 +480,45 @@ public class ServiceDialog extends JDialog implements ActionListener { */ public static String getMsg(String key) { try { - return messageRB.getString(key); + return removeMnemonics(messageRB.getString(key)); } catch (java.util.MissingResourceException e) { throw new Error("Fatal: Resource for ServiceUI is broken; " + "there is no " + key + " key in resource"); } } + private static String removeMnemonics(String s) { + int i = s.indexOf('&'); + int len = s.length(); + if (i < 0 || i == (len - 1)) { + return s; + } + int j = s.indexOf('&', i+1); + if (j == i+1) { + if (j+1 == len) { + return s.substring(0, i+1); // string ends with && + } else { + return s.substring(0, i+1) + removeMnemonics(s.substring(j+1)); + } + } + // ok first & not double && + if (i == 0) { + return removeMnemonics(s.substring(1)); + } else { + return (s.substring(0, i) + removeMnemonics(s.substring(i+1))); + } + } + + /** * Returns mnemonic character from resource */ private static char getMnemonic(String key) { - String str = getMsg(key + ".mnemonic"); - if ((str != null) && (str.length() > 0)) { - return str.charAt(0); + String str = messageRB.getString(key).replace("&&", ""); + int index = str.indexOf('&'); + if (0 <= index && index < str.length() - 1) { + char c = str.charAt(index + 1); + return Character.toUpperCase(c); } else { return (char)0; } @@ -501,12 +527,23 @@ public class ServiceDialog extends JDialog implements ActionListener { /** * Returns the mnemonic as a KeyEvent.VK constant from the resource. */ + static Class _keyEventClazz = null; private static int getVKMnemonic(String key) { - String str = getMsg(key + ".vkMnemonic"); - if ((str != null) && (str.length() > 0)) { - try { - return Integer.parseInt(str); - } catch (NumberFormatException nfe) {} + String s = String.valueOf(getMnemonic(key)); + if ( s == null || s.length() != 1) { + return 0; + } + String vkString = "VK_" + s.toUpperCase(); + + try { + if (_keyEventClazz == null) { + _keyEventClazz= Class.forName("java.awt.event.KeyEvent", + true, (ServiceDialog.class).getClassLoader()); + } + Field field = _keyEventClazz.getDeclaredField(vkString); + int value = field.getInt(null); + return value; + } catch (Exception e) { } return 0; } diff --git a/src/share/classes/sun/print/resources/serviceui.properties b/src/share/classes/sun/print/resources/serviceui.properties index ca244a870d716213b8430079b365f47b7eec4c21..6c97dce95b21a96abc97a67e66976cf83e431a12 100644 --- a/src/share/classes/sun/print/resources/serviceui.properties +++ b/src/share/classes/sun/print/resources/serviceui.properties @@ -14,15 +14,11 @@ border.margins=Margins button.cancel=Cancel button.ok=OK button.print=Print -button.properties=Properties... -button.properties.mnemonic=R +button.properties=P&roperties... # -checkbox.collate=Collate -checkbox.collate.mnemonic=C -checkbox.jobsheets=Banner Page -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=Print To File -checkbox.printtofile.mnemonic=F +checkbox.collate=&Collate +checkbox.jobsheets=&Banner Page +checkbox.printtofile=Print To &File # dialog.printtitle=Print dialog.pstitle=Page Setup @@ -33,70 +29,42 @@ dialog.noprintermsg=No print service found. dialog.writeerror=Cannot write to file: # label.info=Info: -label.jobname=Job Name: -label.jobname.mnemonic=J -label.numcopies=Number of copies: -label.numcopies.mnemonic=O -label.priority=Priority: -label.priority.mnemonic=R -label.psname=Name: -label.psname.mnemonic=N +label.jobname=&Job Name: +label.numcopies=Number &of copies: +label.priority=P&riority: +label.psname=&Name: label.pstype=Type: label.rangeto=To -label.size=Size: -label.size.mnemonic=Z -label.source=Source: -label.source.mnemonic=C +label.size=Si&ze: +label.source=Sour&ce: label.status=Status: -label.username=User Name: -label.username.mnemonic=U +label.username=&User Name: label.millimetres=(mm) label.inches=(in) -label.topmargin=top -label.topmargin.mnemonic=T -label.bottommargin=bottom -label.bottommargin.mnemonic=B -label.leftmargin=left -label.leftmargin.mnemonic=F -label.rightmargin=right -label.rightmargin.mnemonic=R +label.topmargin=&top +label.bottommargin=&bottom +label.leftmargin=le&ft +label.rightmargin=&right # -radiobutton.color=Color -radiobutton.color.mnemonic=C -radiobutton.draftq=Draft -radiobutton.draftq.mnemonic=F -radiobutton.duplex=Duplex -radiobutton.duplex.mnemonic=D -radiobutton.highq=High -radiobutton.highq.mnemonic=H -radiobutton.landscape=Landscape -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=Monochrome -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normal -radiobutton.normalq.mnemonic=N -radiobutton.oneside=One Side -radiobutton.oneside.mnemonic=O -radiobutton.portrait=Portrait -radiobutton.portrait.mnemonic=P -radiobutton.rangeall=All -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=Pages -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=Reverse Landscape -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=Reverse Portrait -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=Tumble -radiobutton.tumble.mnemonic=T +radiobutton.color=&Color +radiobutton.draftq=Dra&ft +radiobutton.duplex=&Duplex +radiobutton.highq=&High +radiobutton.landscape=&Landscape +radiobutton.monochrome=&Monochrome +radiobutton.normalq=&Normal +radiobutton.oneside=&One Side +radiobutton.portrait=&Portrait +radiobutton.rangeall=A&ll +radiobutton.rangepages=Pag&es +radiobutton.revlandscape=Reverse La&ndscape +radiobutton.revportrait=Reverse Portra&it +radiobutton.tumble=&Tumble # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Appearance -tab.appearance.vkMnemonic=65 -tab.general=General -tab.general.vkMnemonic=71 -tab.pagesetup=Page Setup -tab.pagesetup.vkMnemonic=83 +tab.appearance=&Appearance +tab.general=&General +tab.pagesetup=Page &Setup # error.pagerange=Invalid page range; please re-enter values (e.g. 1-3,5,7-10) error.destination=Invalid filename; please try again diff --git a/src/share/classes/sun/print/resources/serviceui_de.properties b/src/share/classes/sun/print/resources/serviceui_de.properties index b89af429b2e338f6df2a08d144aea7d8c1a5c236..67d06a3312f691212f4d4324e542a4250b15e04b 100644 --- a/src/share/classes/sun/print/resources/serviceui_de.properties +++ b/src/share/classes/sun/print/resources/serviceui_de.properties @@ -14,15 +14,11 @@ border.margins=R\u00E4nder button.cancel=Abbrechen button.ok=OK button.print=Drucken -button.properties=Eigenschaften... -button.properties.mnemonic=I +button.properties=E&igenschaften... # -checkbox.collate=Sortieren -checkbox.collate.mnemonic=R -checkbox.jobsheets=Bannerseite -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=Ausgabe in Datei -checkbox.printtofile.mnemonic=U +checkbox.collate=So&rtieren +checkbox.jobsheets=&Bannerseite +checkbox.printtofile=A&usgabe in Datei # dialog.printtitle=Drucken dialog.pstitle=Seite einrichten @@ -33,70 +29,42 @@ dialog.noprintermsg=Kein Druckservice gefunden. dialog.writeerror=Schreiben in Datei nicht m\u00F6glich: # label.info=Info: -label.jobname=Job-Name: -label.jobname.mnemonic=J -label.numcopies=Anzahl Kopien: -label.numcopies.mnemonic=K -label.priority=Priorit\u00E4t: -label.priority.mnemonic=R -label.psname=Name: -label.psname.mnemonic=N +label.jobname=&Job-Name: +label.numcopies=Anzahl &Kopien: +label.priority=P&riorit\u00E4t: +label.psname=&Name: label.pstype=Typ: label.rangeto=Bis -label.size=Gr\u00F6\u00DFe: -label.size.mnemonic=E -label.source=Quelle: -label.source.mnemonic=U +label.size=Gr\u00F6\u00DF&e: +label.source=Q&uelle: label.status=Status: -label.username=Benutzername: -label.username.mnemonic=U +label.username=Ben&utzername: label.millimetres=(mm) label.inches=(Zoll) -label.topmargin=oben -label.topmargin.mnemonic=O -label.bottommargin=unten -label.bottommargin.mnemonic=N -label.leftmargin=links -label.leftmargin.mnemonic=L -label.rightmargin=rechts -label.rightmargin.mnemonic=R +label.topmargin=&oben +label.bottommargin=u&nten +label.leftmargin=&links +label.rightmargin=&rechts # -radiobutton.color=Farbe -radiobutton.color.mnemonic=F -radiobutton.draftq=Entwurf -radiobutton.draftq.mnemonic=W -radiobutton.duplex=Duplex -radiobutton.duplex.mnemonic=P -radiobutton.highq=Hoch -radiobutton.highq.mnemonic=H -radiobutton.landscape=Querformat -radiobutton.landscape.mnemonic=Q -radiobutton.monochrome=Monochrom -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normal -radiobutton.normalq.mnemonic=N -radiobutton.oneside=Einseitig -radiobutton.oneside.mnemonic=E -radiobutton.portrait=Hochformat -radiobutton.portrait.mnemonic=H -radiobutton.rangeall=Alle -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=Seiten -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=Umgekehrtes Querformat -radiobutton.revlandscape.mnemonic=M -radiobutton.revportrait=Umgekehrtes Hochformat -radiobutton.revportrait.mnemonic=K -radiobutton.tumble=Kalenderdruck -radiobutton.tumble.mnemonic=K +radiobutton.color=&Farbe +radiobutton.draftq=Ent&wurf +radiobutton.duplex=Du&plex +radiobutton.highq=&Hoch +radiobutton.landscape=&Querformat +radiobutton.monochrome=&Monochrom +radiobutton.normalq=&Normal +radiobutton.oneside=&Einseitig +radiobutton.portrait=&Hochformat +radiobutton.rangeall=A&lle +radiobutton.rangepages=S&eiten +radiobutton.revlandscape=U&mgekehrtes Querformat +radiobutton.revportrait=Umge&kehrtes Hochformat +radiobutton.tumble=&Kalenderdruck # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Darstellung -tab.appearance.vkMnemonic=68 -tab.general=Allgemein -tab.general.vkMnemonic=65 -tab.pagesetup=Seite einrichten -tab.pagesetup.vkMnemonic=83 +tab.appearance=&Darstellung +tab.general=&Allgemein +tab.pagesetup=&Seite einrichten # error.pagerange=Ung\u00FCltiger Seitenbereich. Geben Sie die Werte erneut ein (Beispiel: 1-3,5,7-10) error.destination=Ung\u00FCltiger Dateiname. Wiederholen Sie den Vorgang diff --git a/src/share/classes/sun/print/resources/serviceui_es.properties b/src/share/classes/sun/print/resources/serviceui_es.properties index ddca5ab9e01e99db5cd9eb7217fa66eb81c074e0..f92f58e8e00f74be96e09b97e2c1e872c220926c 100644 --- a/src/share/classes/sun/print/resources/serviceui_es.properties +++ b/src/share/classes/sun/print/resources/serviceui_es.properties @@ -14,15 +14,11 @@ border.margins=M\u00E1rgenes button.cancel=Cancelar button.ok=Aceptar button.print=Imprimir -button.properties=Propiedades... -button.properties.mnemonic=R +button.properties=P&ropiedades... # -checkbox.collate=Intercalar -checkbox.collate.mnemonic=C -checkbox.jobsheets=P\u00E1gina de R\u00F3tulo -checkbox.jobsheets.mnemonic=E -checkbox.printtofile=Imprimir en Archivo -checkbox.printtofile.mnemonic=M +checkbox.collate=Inter&calar +checkbox.jobsheets=P\u00E1gina d&e R\u00F3tulo +checkbox.printtofile=I&mprimir en Archivo # dialog.printtitle=Imprimir dialog.pstitle=Preparar P\u00E1gina @@ -33,70 +29,42 @@ dialog.noprintermsg=No se ha encontrado el servicio de impresi\u00F3n. dialog.writeerror=No se puede escribir en el archivo: # label.info=Informaci\u00F3n: -label.jobname=Nombre del Trabajo: -label.jobname.mnemonic=T -label.numcopies=N\u00FAmero de Copias: -label.numcopies.mnemonic=O -label.priority=Prioridad: -label.priority.mnemonic=I -label.psname=Nombre: -label.psname.mnemonic=N +label.jobname=Nombre del &Trabajo: +label.numcopies=N\u00FAmer&o de Copias: +label.priority=Pr&ioridad: +label.psname=&Nombre: label.pstype=Tipo: label.rangeto=A -label.size=Tama\u00F1o: -label.size.mnemonic=T +label.size=&Tama\u00F1o: label.source=Origen: -label.source.mnemonic=O label.status=Estado: -label.username=Usuario: -label.username.mnemonic=S +label.username=U&suario: label.millimetres=(mm) label.inches=(pulg.) label.topmargin=superior -label.topmargin.mnemonic=S -label.bottommargin=inferior -label.bottommargin.mnemonic=F -label.leftmargin=izquierdo -label.leftmargin.mnemonic=Q -label.rightmargin=derecho -label.rightmargin.mnemonic=E +label.bottommargin=in&ferior +label.leftmargin=iz&quierdo +label.rightmargin=d&erecho # -radiobutton.color=Color -radiobutton.color.mnemonic=C -radiobutton.draftq=Borrador -radiobutton.draftq.mnemonic=R -radiobutton.duplex=D\u00FAplex -radiobutton.duplex.mnemonic=D -radiobutton.highq=Alta -radiobutton.highq.mnemonic=L -radiobutton.landscape=Horizontal -radiobutton.landscape.mnemonic=Z -radiobutton.monochrome=Monocromo -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normal -radiobutton.normalq.mnemonic=N -radiobutton.oneside=Una Cara -radiobutton.oneside.mnemonic=U -radiobutton.portrait=Vertical -radiobutton.portrait.mnemonic=V -radiobutton.rangeall=Todo -radiobutton.rangeall.mnemonic=T -radiobutton.rangepages=P\u00E1ginas -radiobutton.rangepages.mnemonic=G -radiobutton.revlandscape=Horizontal Inverso -radiobutton.revlandscape.mnemonic=H -radiobutton.revportrait=Vertical Inverso -radiobutton.revportrait.mnemonic=R -radiobutton.tumble=Cambio de Cara -radiobutton.tumble.mnemonic=B +radiobutton.color=&Color +radiobutton.draftq=Bo&rrador +radiobutton.duplex=&D\u00FAplex +radiobutton.highq=A<a +radiobutton.landscape=Hori&zontal +radiobutton.monochrome=&Monocromo +radiobutton.normalq=&Normal +radiobutton.oneside=&Una Cara +radiobutton.portrait=&Vertical +radiobutton.rangeall=&Todo +radiobutton.rangepages=P\u00E1&ginas +radiobutton.revlandscape=&Horizontal Inverso +radiobutton.revportrait=Ve&rtical Inverso +radiobutton.tumble=Cam&bio de Cara # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Apariencia -tab.appearance.vkMnemonic=65 -tab.general=General -tab.general.vkMnemonic=71 -tab.pagesetup=Preparar P\u00E1gina -tab.pagesetup.vkMnemonic=80 +tab.appearance=&Apariencia +tab.general=&General +tab.pagesetup=&Preparar P\u00E1gina # error.pagerange=Rango de p\u00E1ginas no v\u00E1lido; vuelva a introducir los valores (por ejemplo, 1-3, 5, 7-10) error.destination=Nombre de archivo no v\u00E1lido; int\u00E9ntelo de nuevo diff --git a/src/share/classes/sun/print/resources/serviceui_fr.properties b/src/share/classes/sun/print/resources/serviceui_fr.properties index a74d5677454b8eb8546fab456595b1a1a5d7eff1..2b7b160c75aea4eb64eb06ad22e62da00a7254a5 100644 --- a/src/share/classes/sun/print/resources/serviceui_fr.properties +++ b/src/share/classes/sun/print/resources/serviceui_fr.properties @@ -14,15 +14,11 @@ border.margins=Marges button.cancel=Annuler button.ok=OK button.print=Imprimer -button.properties=Propri\u00E9t\u00E9s... -button.properties.mnemonic=R +button.properties=P&ropri\u00E9t\u00E9s... # -checkbox.collate=Collationner -checkbox.collate.mnemonic=C -checkbox.jobsheets=Page de banni\u00E8re -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=Imprimer dans un fichier -checkbox.printtofile.mnemonic=F +checkbox.collate=&Collationner +checkbox.jobsheets=Page de &banni\u00E8re +checkbox.printtofile=Imprimer dans un &fichier # dialog.printtitle=Imprimer dialog.pstitle=Mise en page @@ -33,70 +29,42 @@ dialog.noprintermsg=Service d'impression introuvable. dialog.writeerror=Impossible d'\u00E9crire dans le fichier : # label.info=Infos : -label.jobname=Nom du travail : -label.jobname.mnemonic=T -label.numcopies=Nombre de copies : -label.numcopies.mnemonic=O -label.priority=Priorit\u00E9 : -label.priority.mnemonic=R -label.psname=Nom : -label.psname.mnemonic=N +label.jobname=Nom du &travail : +label.numcopies=N&ombre de copies : +label.priority=P&riorit\u00E9 : +label.psname=&Nom : label.pstype=Type : label.rangeto=A -label.size=Taille : -label.size.mnemonic=L -label.source=Source : -label.source.mnemonic=C +label.size=Tai&lle : +label.source=Sour&ce : label.status=Statut : -label.username=Nom utilisateur : -label.username.mnemonic=O +label.username=N&om utilisateur : label.millimetres=(mm) label.inches=(po) -label.topmargin=haut -label.topmargin.mnemonic=H -label.bottommargin=bas -label.bottommargin.mnemonic=B -label.leftmargin=gauche -label.leftmargin.mnemonic=G -label.rightmargin=droite -label.rightmargin.mnemonic=D +label.topmargin=&haut +label.bottommargin=&bas +label.leftmargin=&gauche +label.rightmargin=&droite # -radiobutton.color=Couleur -radiobutton.color.mnemonic=C -radiobutton.draftq=Brouillon -radiobutton.draftq.mnemonic=L -radiobutton.duplex=Duplex -radiobutton.duplex.mnemonic=D -radiobutton.highq=Max. -radiobutton.highq.mnemonic=X -radiobutton.landscape=Paysage -radiobutton.landscape.mnemonic=Y -radiobutton.monochrome=Monochrome -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normal -radiobutton.normalq.mnemonic=N -radiobutton.oneside=Un c\u00F4t\u00E9 -radiobutton.oneside.mnemonic=U -radiobutton.portrait=Portrait -radiobutton.portrait.mnemonic=P -radiobutton.rangeall=Tout -radiobutton.rangeall.mnemonic=T -radiobutton.rangepages=Pages -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=Paysage invers\u00E9 -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=Portrait invers\u00E9 -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=T\u00EAte-b\u00EAche -radiobutton.tumble.mnemonic=T +radiobutton.color=&Couleur +radiobutton.draftq=Broui&llon +radiobutton.duplex=&Duplex +radiobutton.highq=Ma&x. +radiobutton.landscape=Pa&ysage +radiobutton.monochrome=&Monochrome +radiobutton.normalq=&Normal +radiobutton.oneside=&Un c\u00F4t\u00E9 +radiobutton.portrait=&Portrait +radiobutton.rangeall=&Tout +radiobutton.rangepages=Pag&es +radiobutton.revlandscape=Paysage i&nvers\u00E9 +radiobutton.revportrait=Portra&it invers\u00E9 +radiobutton.tumble=&T\u00EAte-b\u00EAche # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Apparence -tab.appearance.vkMnemonic=65 -tab.general=G\u00E9n\u00E9ral -tab.general.vkMnemonic=71 -tab.pagesetup=Mise en page -tab.pagesetup.vkMnemonic=83 +tab.appearance=&Apparence +tab.general=&G\u00E9n\u00E9ral +tab.pagesetup=Mi&se en page # error.pagerange=Plage de pages non valide. Sp\u00E9cifiez les valeurs de nouveau (ex. : 1-3,5,7-10) error.destination=Nom de fichier non valide ; recommencez diff --git a/src/share/classes/sun/print/resources/serviceui_it.properties b/src/share/classes/sun/print/resources/serviceui_it.properties index e23da1c57ec7e79dc8cf20ccca0df48379c4925c..a824ef18223a274e861ae1f2e4e7c688d9a09a48 100644 --- a/src/share/classes/sun/print/resources/serviceui_it.properties +++ b/src/share/classes/sun/print/resources/serviceui_it.properties @@ -14,15 +14,11 @@ border.margins=Margini button.cancel=Annulla button.ok=OK button.print=Stampa -button.properties=Propriet\u00E0... -button.properties.mnemonic=R +button.properties=P&ropriet\u00E0... # -checkbox.collate=Fascicola -checkbox.collate.mnemonic=L -checkbox.jobsheets=Pagina banner -checkbox.jobsheets.mnemonic=P -checkbox.printtofile=Stampa su file -checkbox.printtofile.mnemonic=F +checkbox.collate=Fascico&la +checkbox.jobsheets=&Pagina banner +checkbox.printtofile=Stampa su &file # dialog.printtitle=Stampa dialog.pstitle=Imposta pagina @@ -33,70 +29,42 @@ dialog.noprintermsg=Nessun servizio di stampa trovato dialog.writeerror=Impossibile scrivere nel file: # label.info=Informazioni: -label.jobname=Nome job: -label.jobname.mnemonic=J -label.numcopies=Numero di copie: -label.numcopies.mnemonic=O -label.priority=Priorit\u00E0: -label.priority.mnemonic=I -label.psname=Nome: -label.psname.mnemonic=N +label.jobname=Nome &job: +label.numcopies=Numer&o di copie: +label.priority=Pr&iorit\u00E0: +label.psname=&Nome: label.pstype=Tipo: label.rangeto=A -label.size=Dimensioni: -label.size.mnemonic=M -label.source=Origine: -label.source.mnemonic=R +label.size=Di&mensioni: +label.source=O&rigine: label.status=Stato: -label.username=Nome utente: -label.username.mnemonic=U +label.username=Nome &utente: label.millimetres=(mm) label.inches=(poll.) -label.topmargin=superiore -label.topmargin.mnemonic=P -label.bottommargin=inferiore -label.bottommargin.mnemonic=F -label.leftmargin=sinistro -label.leftmargin.mnemonic=T -label.rightmargin=destro -label.rightmargin.mnemonic=D +label.topmargin=su&periore +label.bottommargin=in&feriore +label.leftmargin=sinis&tro +label.rightmargin=&destro # -radiobutton.color=Colore -radiobutton.color.mnemonic=C -radiobutton.draftq=Bozza -radiobutton.draftq.mnemonic=B -radiobutton.duplex=Fronte retro -radiobutton.duplex.mnemonic=R -radiobutton.highq=Alta -radiobutton.highq.mnemonic=L -radiobutton.landscape=Orizzontale -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=Monocromatico -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normale -radiobutton.normalq.mnemonic=N -radiobutton.oneside=Un lato -radiobutton.oneside.mnemonic=O -radiobutton.portrait=Verticale -radiobutton.portrait.mnemonic=V -radiobutton.rangeall=Tutto -radiobutton.rangeall.mnemonic=U -radiobutton.rangepages=Pagine -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=Orizzontale capovolto -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=Verticale capovolto -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=Lato corto -radiobutton.tumble.mnemonic=T +radiobutton.color=&Colore +radiobutton.draftq=&Bozza +radiobutton.duplex=F&ronte retro +radiobutton.highq=A<a +radiobutton.landscape=Orizzonta&le +radiobutton.monochrome=&Monocromatico +radiobutton.normalq=&Normale +radiobutton.oneside=Un lat&o +radiobutton.portrait=&Verticale +radiobutton.rangeall=T&utto +radiobutton.rangepages=Pagin&e +radiobutton.revlandscape=Orizzo&ntale capovolto +radiobutton.revportrait=Vert&icale capovolto +radiobutton.tumble=La&to corto # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Aspetto -tab.appearance.vkMnemonic=65 -tab.general=Generale -tab.general.vkMnemonic=71 -tab.pagesetup=Imposta pagina -tab.pagesetup.vkMnemonic=83 +tab.appearance=&Aspetto +tab.general=&Generale +tab.pagesetup=Impo&sta pagina # error.pagerange=Intervallo pagine non valido; immettere nuovamente i valori (ad es. 1-3,5,7-10) error.destination=Nome file non valido; riprovare diff --git a/src/share/classes/sun/print/resources/serviceui_ja.properties b/src/share/classes/sun/print/resources/serviceui_ja.properties index d707013a300c36521bf66bb0f456a1128edc6df4..a6dbd3802cefbc38482568b619f3ecfd86063370 100644 --- a/src/share/classes/sun/print/resources/serviceui_ja.properties +++ b/src/share/classes/sun/print/resources/serviceui_ja.properties @@ -14,15 +14,11 @@ border.margins=\u30DE\u30FC\u30B8\u30F3 button.cancel=\u53D6\u6D88 button.ok=OK button.print=\u5370\u5237 -button.properties=\u30D7\u30ED\u30D1\u30C6\u30A3(R)... -button.properties.mnemonic=R +button.properties=\u30D7\u30ED\u30D1\u30C6\u30A3(&R)... # -checkbox.collate=\u4E01\u5408\u3044(C) -checkbox.collate.mnemonic=C -checkbox.jobsheets=\u30D0\u30CA\u30FC\u30FB\u30DA\u30FC\u30B8(B) -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=\u30D5\u30A1\u30A4\u30EB\u306B\u51FA\u529B(F) -checkbox.printtofile.mnemonic=F +checkbox.collate=\u4E01\u5408\u3044(&C) +checkbox.jobsheets=\u30D0\u30CA\u30FC\u30FB\u30DA\u30FC\u30B8(&B) +checkbox.printtofile=\u30D5\u30A1\u30A4\u30EB\u306B\u51FA\u529B(&F) # dialog.printtitle=\u5370\u5237 dialog.pstitle=\u30DA\u30FC\u30B8\u8A2D\u5B9A @@ -33,70 +29,42 @@ dialog.noprintermsg=\u5370\u5237\u30B5\u30FC\u30D3\u30B9\u304C\u898B\u3064\u304B dialog.writeerror=\u30D5\u30A1\u30A4\u30EB\u306B\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093: # label.info=\u60C5\u5831: -label.jobname=\u30B8\u30E7\u30D6\u540D(J): -label.jobname.mnemonic=J -label.numcopies=\u5370\u5237\u90E8\u6570(O): -label.numcopies.mnemonic=O -label.priority=\u512A\u5148\u5EA6(R): -label.priority.mnemonic=R -label.psname=\u540D\u524D(N): -label.psname.mnemonic=N +label.jobname=\u30B8\u30E7\u30D6\u540D(&J): +label.numcopies=\u5370\u5237\u90E8\u6570(&O): +label.priority=\u512A\u5148\u5EA6(&R): +label.psname=\u540D\u524D(&N): label.pstype=\u30BF\u30A4\u30D7: label.rangeto=\u5370\u5237\u7BC4\u56F2 -label.size=\u30B5\u30A4\u30BA(Z): -label.size.mnemonic=Z -label.source=\u30BD\u30FC\u30B9(C): -label.source.mnemonic=C +label.size=\u30B5\u30A4\u30BA(&Z): +label.source=\u30BD\u30FC\u30B9(&C): label.status=\u72B6\u614B: -label.username=\u30E6\u30FC\u30B6\u30FC\u540D(U): -label.username.mnemonic=U +label.username=\u30E6\u30FC\u30B6\u30FC\u540D(&U): label.millimetres=(mm) label.inches=(in) -label.topmargin=\u4E0A(T) -label.topmargin.mnemonic=T -label.bottommargin=\u4E0B(B) -label.bottommargin.mnemonic=B -label.leftmargin=\u5DE6(F) -label.leftmargin.mnemonic=F -label.rightmargin=\u53F3(R) -label.rightmargin.mnemonic=R +label.topmargin=\u4E0A(&T) +label.bottommargin=\u4E0B(&B) +label.leftmargin=\u5DE6(&F) +label.rightmargin=\u53F3(&R) # -radiobutton.color=\u30AB\u30E9\u30FC(C) -radiobutton.color.mnemonic=C -radiobutton.draftq=\u30C9\u30E9\u30D5\u30C8(F) -radiobutton.draftq.mnemonic=F -radiobutton.duplex=\u4E21\u9762(D) -radiobutton.duplex.mnemonic=D -radiobutton.highq=\u9AD8(H) -radiobutton.highq.mnemonic=H -radiobutton.landscape=\u6A2A(L) -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=\u30E2\u30CE\u30AF\u30ED(M) -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=\u6A19\u6E96(N) -radiobutton.normalq.mnemonic=N -radiobutton.oneside=\u7247\u9762(O) -radiobutton.oneside.mnemonic=O -radiobutton.portrait=\u7E26(P) -radiobutton.portrait.mnemonic=P -radiobutton.rangeall=\u3059\u3079\u3066(L) -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=\u30DA\u30FC\u30B8(E) -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=\u30E9\u30F3\u30C9\u30B9\u30B1\u30FC\u30D7(\u53CD\u8EE2)(N) -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=\u30DD\u30FC\u30C8\u30EC\u30A4\u30C8(\u53CD\u8EE2)(I) -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=\u53CD\u8EE2(T) -radiobutton.tumble.mnemonic=T +radiobutton.color=\u30AB\u30E9\u30FC(&C) +radiobutton.draftq=\u30C9\u30E9\u30D5\u30C8(&F) +radiobutton.duplex=\u4E21\u9762(&D) +radiobutton.highq=\u9AD8(&H) +radiobutton.landscape=\u6A2A(&L) +radiobutton.monochrome=\u30E2\u30CE\u30AF\u30ED(&M) +radiobutton.normalq=\u6A19\u6E96(&N) +radiobutton.oneside=\u7247\u9762(&O) +radiobutton.portrait=\u7E26(&P) +radiobutton.rangeall=\u3059\u3079\u3066(&L) +radiobutton.rangepages=\u30DA\u30FC\u30B8(&E) +radiobutton.revlandscape=\u30E9\u30F3\u30C9\u30B9\u30B1\u30FC\u30D7(\u53CD\u8EE2)(&N) +radiobutton.revportrait=\u30DD\u30FC\u30C8\u30EC\u30A4\u30C8(\u53CD\u8EE2)(&I) +radiobutton.tumble=\u53CD\u8EE2(&T) # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=\u5916\u89B3(A) -tab.appearance.vkMnemonic=65 -tab.general=\u4E00\u822C(G) -tab.general.vkMnemonic=71 -tab.pagesetup=\u30DA\u30FC\u30B8\u8A2D\u5B9A(S) -tab.pagesetup.vkMnemonic=83 +tab.appearance=\u5916\u89B3(&A) +tab.general=\u4E00\u822C(&G) +tab.pagesetup=\u30DA\u30FC\u30B8\u8A2D\u5B9A(&S) # error.pagerange=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u7BC4\u56F2\u3002\u5024\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044(\u4F8B\u30011-3,5,7-10) error.destination=\u7121\u52B9\u306A\u30D5\u30A1\u30A4\u30EB\u540D\u3002\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 diff --git a/src/share/classes/sun/print/resources/serviceui_ko.properties b/src/share/classes/sun/print/resources/serviceui_ko.properties index d4acf2fea3e857b76084ee5e283f65a8a4a36c35..e0db7aa709877a6844ef9dafc06a434cfe3da370 100644 --- a/src/share/classes/sun/print/resources/serviceui_ko.properties +++ b/src/share/classes/sun/print/resources/serviceui_ko.properties @@ -14,15 +14,11 @@ border.margins=\uC5EC\uBC31 button.cancel=\uCDE8\uC18C button.ok=\uD655\uC778 button.print=\uC778\uC1C4 -button.properties=\uC18D\uC131(R)... -button.properties.mnemonic=R +button.properties=\uC18D\uC131(&R)... # -checkbox.collate=\uD55C \uBD80\uC529 \uC778\uC1C4(C) -checkbox.collate.mnemonic=C -checkbox.jobsheets=\uBC30\uB108 \uD398\uC774\uC9C0(B) -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=\uD30C\uC77C\uB85C \uC778\uC1C4(F) -checkbox.printtofile.mnemonic=F +checkbox.collate=\uD55C \uBD80\uC529 \uC778\uC1C4(&C) +checkbox.jobsheets=\uBC30\uB108 \uD398\uC774\uC9C0(&B) +checkbox.printtofile=\uD30C\uC77C\uB85C \uC778\uC1C4(&F) # dialog.printtitle=\uC778\uC1C4 dialog.pstitle=\uD398\uC774\uC9C0 \uC124\uC815 @@ -33,70 +29,42 @@ dialog.noprintermsg=\uC778\uC1C4 \uC11C\uBE44\uC2A4\uB97C \uCC3E\uC744 \uC218 \u dialog.writeerror=\uD30C\uC77C\uC5D0 \uC4F8 \uC218 \uC5C6\uC74C: # label.info=\uC815\uBCF4: -label.jobname=\uC791\uC5C5 \uC774\uB984(J): -label.jobname.mnemonic=J -label.numcopies=\uB9E4\uC218(O): -label.numcopies.mnemonic=O -label.priority=\uC6B0\uC120\uC21C\uC704(R): -label.priority.mnemonic=R -label.psname=\uC774\uB984(N): -label.psname.mnemonic=N +label.jobname=\uC791\uC5C5 \uC774\uB984(&J): +label.numcopies=\uB9E4\uC218(&O): +label.priority=\uC6B0\uC120\uC21C\uC704(&R): +label.psname=\uC774\uB984(&N): label.pstype=\uC720\uD615: label.rangeto=\uC885\uB8CC -label.size=\uD06C\uAE30(Z): -label.size.mnemonic=Z -label.source=\uC18C\uC2A4(C): -label.source.mnemonic=C +label.size=\uD06C\uAE30(&Z): +label.source=\uC18C\uC2A4(&C): label.status=\uC0C1\uD0DC: -label.username=\uC0AC\uC6A9\uC790 \uC774\uB984(U): -label.username.mnemonic=U +label.username=\uC0AC\uC6A9\uC790 \uC774\uB984(&U): label.millimetres=(mm) label.inches=(\uC778\uCE58) -label.topmargin=\uC704\uCABD(T) -label.topmargin.mnemonic=T -label.bottommargin=\uC544\uB798\uCABD(B) -label.bottommargin.mnemonic=B -label.leftmargin=\uC67C\uCABD(F) -label.leftmargin.mnemonic=F -label.rightmargin=\uC624\uB978\uCABD(R) -label.rightmargin.mnemonic=R +label.topmargin=\uC704\uCABD(&T) +label.bottommargin=\uC544\uB798\uCABD(&B) +label.leftmargin=\uC67C\uCABD(&F) +label.rightmargin=\uC624\uB978\uCABD(&R) # -radiobutton.color=\uC0C9\uC0C1(C) -radiobutton.color.mnemonic=C -radiobutton.draftq=\uCD08\uC548(F) -radiobutton.draftq.mnemonic=F -radiobutton.duplex=\uC591\uBA74(D) -radiobutton.duplex.mnemonic=D -radiobutton.highq=\uB192\uC74C(H) -radiobutton.highq.mnemonic=H -radiobutton.landscape=\uAC00\uB85C(L) -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=\uB2E8\uC0C9(M) -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=\uBCF4\uD1B5(N) -radiobutton.normalq.mnemonic=N -radiobutton.oneside=\uB2E8\uBA74(O) -radiobutton.oneside.mnemonic=O -radiobutton.portrait=\uC138\uB85C(P) -radiobutton.portrait.mnemonic=P -radiobutton.rangeall=\uC804\uCCB4(L) -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=\uD398\uC774\uC9C0(E) -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=\uAC00\uB85C \uBC18\uC804(N) -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=\uC138\uB85C \uBC18\uC804(I) -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=\uD68C\uC804\uC2DD(T) -radiobutton.tumble.mnemonic=T +radiobutton.color=\uC0C9\uC0C1(&C) +radiobutton.draftq=\uCD08\uC548(&F) +radiobutton.duplex=\uC591\uBA74(&D) +radiobutton.highq=\uB192\uC74C(&H) +radiobutton.landscape=\uAC00\uB85C(&L) +radiobutton.monochrome=\uB2E8\uC0C9(&M) +radiobutton.normalq=\uBCF4\uD1B5(&N) +radiobutton.oneside=\uB2E8\uBA74(&O) +radiobutton.portrait=\uC138\uB85C(&P) +radiobutton.rangeall=\uC804\uCCB4(&L) +radiobutton.rangepages=\uD398\uC774\uC9C0(&E) +radiobutton.revlandscape=\uAC00\uB85C \uBC18\uC804(&N) +radiobutton.revportrait=\uC138\uB85C \uBC18\uC804(&I) +radiobutton.tumble=\uD68C\uC804\uC2DD(&T) # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=\uBAA8\uC591(A) -tab.appearance.vkMnemonic=65 -tab.general=\uC77C\uBC18 \uC0AC\uD56D(G) -tab.general.vkMnemonic=71 -tab.pagesetup=\uD398\uC774\uC9C0 \uC124\uC815(S) -tab.pagesetup.vkMnemonic=83 +tab.appearance=\uBAA8\uC591(&A) +tab.general=\uC77C\uBC18 \uC0AC\uD56D(&G) +tab.pagesetup=\uD398\uC774\uC9C0 \uC124\uC815(&S) # error.pagerange=\uBD80\uC801\uD569\uD55C \uD398\uC774\uC9C0 \uBC94\uC704: \uAC12\uC744 \uB2E4\uC2DC \uC785\uB825\uD558\uC2ED\uC2DC\uC624(\uC608: 1-3,5,7-10). error.destination=\uBD80\uC801\uD569\uD55C \uD30C\uC77C \uC774\uB984: \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624. diff --git a/src/share/classes/sun/print/resources/serviceui_pt_BR.properties b/src/share/classes/sun/print/resources/serviceui_pt_BR.properties index d82178f3a4ecb88f58e51b5d4782512e3a3c9c62..fbd00aa956921f8fbf69feee5703df1c61bbb360 100644 --- a/src/share/classes/sun/print/resources/serviceui_pt_BR.properties +++ b/src/share/classes/sun/print/resources/serviceui_pt_BR.properties @@ -14,15 +14,11 @@ border.margins=Margens button.cancel=Cancelar button.ok=OK button.print=Imprimir -button.properties=Propriedades... -button.properties.mnemonic=D +button.properties=Proprie&dades... # -checkbox.collate=Agrupar -checkbox.collate.mnemonic=R -checkbox.jobsheets=P\u00E1gina com Banner -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=Imprimir em Arquivo -checkbox.printtofile.mnemonic=I +checkbox.collate=Ag&rupar +checkbox.jobsheets=P\u00E1gina com &Banner +checkbox.printtofile=&Imprimir em Arquivo # dialog.printtitle=Imprimir dialog.pstitle=Configura\u00E7\u00E3o da P\u00E1gina @@ -33,70 +29,42 @@ dialog.noprintermsg=Nenhum servi\u00E7o de impress\u00E3o encontrado. dialog.writeerror=N\u00E3o \u00E9 poss\u00EDvel gravar no arquivo: # label.info=Informa\u00E7\u00F5es: -label.jobname=Nome do Job: -label.jobname.mnemonic=J -label.numcopies=N\u00FAmero de c\u00F3pias: -label.numcopies.mnemonic=O -label.priority=Prioridade: -label.priority.mnemonic=P -label.psname=Nome: -label.psname.mnemonic=N +label.jobname=Nome do &Job: +label.numcopies=N\u00FAmer&o de c\u00F3pias: +label.priority=&Prioridade: +label.psname=&Nome: label.pstype=Tipo: label.rangeto=At\u00E9 -label.size=Tamanho: -label.size.mnemonic=M -label.source=Origem: -label.source.mnemonic=O +label.size=Ta&manho: +label.source=&Origem: label.status=Status: -label.username=Nome do Usu\u00E1rio: -label.username.mnemonic=U +label.username=Nome do &Usu\u00E1rio: label.millimetres=(mm) label.inches=(pol) -label.topmargin=superior -label.topmargin.mnemonic=S -label.bottommargin=inferior -label.bottommargin.mnemonic=I -label.leftmargin=esquerda: -label.leftmargin.mnemonic=Q -label.rightmargin=direita -label.rightmargin.mnemonic=D +label.topmargin=&superior +label.bottommargin=&inferior +label.leftmargin=es&querda: +label.rightmargin=&direita # -radiobutton.color=Cor -radiobutton.color.mnemonic=O -radiobutton.draftq=Rascunho -radiobutton.draftq.mnemonic=R -radiobutton.duplex=Duplex -radiobutton.duplex.mnemonic=D -radiobutton.highq=Alta -radiobutton.highq.mnemonic=T -radiobutton.landscape=Paisagem -radiobutton.landscape.mnemonic=P -radiobutton.monochrome=Monocrom\u00E1tico -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normal -radiobutton.normalq.mnemonic=N -radiobutton.oneside=Um Lado -radiobutton.oneside.mnemonic=L -radiobutton.portrait=Retrato -radiobutton.portrait.mnemonic=R -radiobutton.rangeall=Tudo -radiobutton.rangeall.mnemonic=U -radiobutton.rangepages=P\u00E1ginas -radiobutton.rangepages.mnemonic=P -radiobutton.revlandscape=Paisagem Invertida -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=Retrato Invertido -radiobutton.revportrait.mnemonic=E -radiobutton.tumble=Virar -radiobutton.tumble.mnemonic=V +radiobutton.color=C&or +radiobutton.draftq=&Rascunho +radiobutton.duplex=&Duplex +radiobutton.highq=Al&ta +radiobutton.landscape=&Paisagem +radiobutton.monochrome=&Monocrom\u00E1tico +radiobutton.normalq=&Normal +radiobutton.oneside=Um &Lado +radiobutton.portrait=&Retrato +radiobutton.rangeall=T&udo +radiobutton.rangepages=&P\u00E1ginas +radiobutton.revlandscape=Paisagem I&nvertida +radiobutton.revportrait=R&etrato Invertido +radiobutton.tumble=&Virar # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Apar\u00EAncia -tab.appearance.vkMnemonic=65 -tab.general=Geral -tab.general.vkMnemonic=71 -tab.pagesetup=Configura\u00E7\u00E3o de P\u00E1gina -tab.pagesetup.vkMnemonic=67 +tab.appearance=&Apar\u00EAncia +tab.general=&Geral +tab.pagesetup=&Configura\u00E7\u00E3o de P\u00E1gina # error.pagerange=Faixa de p\u00E1ginas inv\u00E1lida; insira novamente os valores (por exemplo, 1-3,5,7-10) error.destination=Nome de arquivo inv\u00E1lido; tente novamente diff --git a/src/share/classes/sun/print/resources/serviceui_sv.properties b/src/share/classes/sun/print/resources/serviceui_sv.properties index 859c04946109f92577eb52136a31350dbc990e66..35ae3741fdc8e2801abfbedbb23ae79d9f9a5934 100644 --- a/src/share/classes/sun/print/resources/serviceui_sv.properties +++ b/src/share/classes/sun/print/resources/serviceui_sv.properties @@ -14,15 +14,11 @@ border.margins=Marginaler button.cancel=Avbryt button.ok=OK button.print=Skriv ut -button.properties=Egenskaper... -button.properties.mnemonic=R +button.properties=Egenskape&r... # -checkbox.collate=Sortera -checkbox.collate.mnemonic=T -checkbox.jobsheets=F\u00F6rs\u00E4ttsblad -checkbox.jobsheets.mnemonic=R -checkbox.printtofile=Skriv ut till fil -checkbox.printtofile.mnemonic=K +checkbox.collate=Sor&tera +checkbox.jobsheets=F\u00F6&rs\u00E4ttsblad +checkbox.printtofile=S&kriv ut till fil # dialog.printtitle=Skriv ut dialog.pstitle=Utskriftsformat @@ -33,70 +29,42 @@ dialog.noprintermsg=Hittade ingen utskriftstj\u00E4nst. dialog.writeerror=Kan inte skriva till filen: # label.info=Information: -label.jobname=Utskrift: -label.jobname.mnemonic=U -label.numcopies=Antal exemplar: -label.numcopies.mnemonic=E -label.priority=Prioritet: -label.priority.mnemonic=R -label.psname=Namn: -label.psname.mnemonic=N +label.jobname=&Utskrift: +label.numcopies=Antal &exemplar: +label.priority=P&rioritet: +label.psname=&Namn: label.pstype=Typ: label.rangeto=Till -label.size=Storlek: -label.size.mnemonic=O -label.source=K\u00E4lla: -label.source.mnemonic=K +label.size=St&orlek: +label.source=&K\u00E4lla: label.status=Status: -label.username=Anv\u00E4ndarnamn: -label.username.mnemonic=N +label.username=A&nv\u00E4ndarnamn: label.millimetres=(mm) label.inches=(tum) -label.topmargin=\u00F6verkant -label.topmargin.mnemonic=R -label.bottommargin=nederkant -label.bottommargin.mnemonic=N -label.leftmargin=v\u00E4nster -label.leftmargin.mnemonic=V -label.rightmargin=h\u00F6ger -label.rightmargin.mnemonic=H +label.topmargin=\u00F6ve&rkant +label.bottommargin=&nederkant +label.leftmargin=&v\u00E4nster +label.rightmargin=&h\u00F6ger # -radiobutton.color=F\u00E4rg -radiobutton.color.mnemonic=G -radiobutton.draftq=Utkast -radiobutton.draftq.mnemonic=K -radiobutton.duplex=Dubbelsidig -radiobutton.duplex.mnemonic=D -radiobutton.highq=H\u00F6g -radiobutton.highq.mnemonic=H -radiobutton.landscape=Liggande -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=Monokrom -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=Normal -radiobutton.normalq.mnemonic=O -radiobutton.oneside=Ensidig -radiobutton.oneside.mnemonic=E -radiobutton.portrait=St\u00E5ende -radiobutton.portrait.mnemonic=D -radiobutton.rangeall=Alla -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=Sidor -radiobutton.rangepages.mnemonic=D -radiobutton.revlandscape=Omv\u00E4nt liggande -radiobutton.revlandscape.mnemonic=G -radiobutton.revportrait=Omv\u00E4nt st\u00E5ende -radiobutton.revportrait.mnemonic=M -radiobutton.tumble=V\u00E4nd -radiobutton.tumble.mnemonic=V +radiobutton.color=F\u00E4r&g +radiobutton.draftq=Ut&kast +radiobutton.duplex=&Dubbelsidig +radiobutton.highq=&H\u00F6g +radiobutton.landscape=&Liggande +radiobutton.monochrome=&Monokrom +radiobutton.normalq=N&ormal +radiobutton.oneside=&Ensidig +radiobutton.portrait=St\u00E5en&de +radiobutton.rangeall=A&lla +radiobutton.rangepages=Si&dor +radiobutton.revlandscape=Omv\u00E4nt li&ggande +radiobutton.revportrait=O&mv\u00E4nt st\u00E5ende +radiobutton.tumble=&V\u00E4nd # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=Format -tab.appearance.vkMnemonic=70 -tab.general=Allm\u00E4nt -tab.general.vkMnemonic=65 -tab.pagesetup=Utskriftsformat -tab.pagesetup.vkMnemonic=83 +tab.appearance=&Format +tab.general=&Allm\u00E4nt +tab.pagesetup=Ut&skriftsformat # error.pagerange=Ogiltigt sidintervall. Skriv in v\u00E4rdena igen (t ex 1-3,5,7-10) error.destination=Ogiltigt filnamn. F\u00F6rs\u00F6k igen. diff --git a/src/share/classes/sun/print/resources/serviceui_zh_CN.properties b/src/share/classes/sun/print/resources/serviceui_zh_CN.properties index 98824cc9ae24567b8babc3807fc10a367cc01a04..2d2f91b4219a3195dcaa904e4fe090bbc7080743 100644 --- a/src/share/classes/sun/print/resources/serviceui_zh_CN.properties +++ b/src/share/classes/sun/print/resources/serviceui_zh_CN.properties @@ -14,15 +14,11 @@ border.margins=\u8FB9\u8DDD button.cancel=\u53D6\u6D88 button.ok=\u786E\u5B9A button.print=\u6253\u5370 -button.properties=\u5C5E\u6027(R)... -button.properties.mnemonic=R +button.properties=\u5C5E\u6027(&R)... # -checkbox.collate=\u9010\u4EFD\u6253\u5370(C) -checkbox.collate.mnemonic=C -checkbox.jobsheets=\u6807\u5E1C\u9875(B) -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=\u6253\u5370\u5230\u6587\u4EF6(F) -checkbox.printtofile.mnemonic=F +checkbox.collate=\u9010\u4EFD\u6253\u5370(&C) +checkbox.jobsheets=\u6807\u5E1C\u9875(&B) +checkbox.printtofile=\u6253\u5370\u5230\u6587\u4EF6(&F) # dialog.printtitle=\u6253\u5370 dialog.pstitle=\u9875\u9762\u8BBE\u7F6E @@ -33,70 +29,42 @@ dialog.noprintermsg=\u627E\u4E0D\u5230\u6253\u5370\u670D\u52A1\u3002 dialog.writeerror=\u65E0\u6CD5\u5199\u5165\u6587\u4EF6: # label.info=\u4FE1\u606F: -label.jobname=\u4F5C\u4E1A\u540D(J): -label.jobname.mnemonic=J -label.numcopies=\u6253\u5370\u4EFD\u6570(O): -label.numcopies.mnemonic=O -label.priority=\u4F18\u5148\u7EA7(R): -label.priority.mnemonic=R -label.psname=\u540D\u79F0(N): -label.psname.mnemonic=N +label.jobname=\u4F5C\u4E1A\u540D(&J): +label.numcopies=\u6253\u5370\u4EFD\u6570(&O): +label.priority=\u4F18\u5148\u7EA7(&R): +label.psname=\u540D\u79F0(&N): label.pstype=\u7C7B\u578B: label.rangeto=\u81F3 -label.size=\u5927\u5C0F(Z): -label.size.mnemonic=Z -label.source=\u6765\u6E90(C): -label.source.mnemonic=C +label.size=\u5927\u5C0F(&Z): +label.source=\u6765\u6E90(&C): label.status=\u72B6\u6001: -label.username=\u7528\u6237\u540D(U): -label.username.mnemonic=U +label.username=\u7528\u6237\u540D(&U): label.millimetres=(\u6BEB\u7C73) label.inches=(\u82F1\u5BF8) -label.topmargin=\u4E0A\u8FB9\u8DDD(T) -label.topmargin.mnemonic=T -label.bottommargin=\u4E0B\u8FB9\u8DDD(B) -label.bottommargin.mnemonic=B -label.leftmargin=\u5DE6\u8FB9\u8DDD(F) -label.leftmargin.mnemonic=F -label.rightmargin=\u53F3\u8FB9\u8DDD(R) -label.rightmargin.mnemonic=R +label.topmargin=\u4E0A\u8FB9\u8DDD(&T) +label.bottommargin=\u4E0B\u8FB9\u8DDD(&B) +label.leftmargin=\u5DE6\u8FB9\u8DDD(&F) +label.rightmargin=\u53F3\u8FB9\u8DDD(&R) # -radiobutton.color=\u989C\u8272(C) -radiobutton.color.mnemonic=C -radiobutton.draftq=\u8349\u56FE(F) -radiobutton.draftq.mnemonic=F -radiobutton.duplex=\u53CC\u9762\u6253\u5370(D) -radiobutton.duplex.mnemonic=D -radiobutton.highq=\u9AD8(H) -radiobutton.highq.mnemonic=H -radiobutton.landscape=\u6A2A\u5411(L) -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=\u5355\u8272(M) -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=\u6B63\u5E38(N) -radiobutton.normalq.mnemonic=N -radiobutton.oneside=\u5355\u9762(O) -radiobutton.oneside.mnemonic=O -radiobutton.portrait=\u7EB5\u5411(P) -radiobutton.portrait.mnemonic=P -radiobutton.rangeall=\u5168\u90E8(L) -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=\u9875\u7801\u8303\u56F4(E) -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=\u6A2A\u5411\u53CD\u9762\u6253\u5370(N) -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=\u7EB5\u5411\u53CD\u9762\u6253\u5370(I) -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=\u7FFB\u8F6C(T) -radiobutton.tumble.mnemonic=T +radiobutton.color=\u989C\u8272(&C) +radiobutton.draftq=\u8349\u56FE(&F) +radiobutton.duplex=\u53CC\u9762\u6253\u5370(&D) +radiobutton.highq=\u9AD8(&H) +radiobutton.landscape=\u6A2A\u5411(&L) +radiobutton.monochrome=\u5355\u8272(&M) +radiobutton.normalq=\u6B63\u5E38(&N) +radiobutton.oneside=\u5355\u9762(&O) +radiobutton.portrait=\u7EB5\u5411(&P) +radiobutton.rangeall=\u5168\u90E8(&L) +radiobutton.rangepages=\u9875\u7801\u8303\u56F4(&E) +radiobutton.revlandscape=\u6A2A\u5411\u53CD\u9762\u6253\u5370(&N) +radiobutton.revportrait=\u7EB5\u5411\u53CD\u9762\u6253\u5370(&I) +radiobutton.tumble=\u7FFB\u8F6C(&T) # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=\u5916\u89C2(A) -tab.appearance.vkMnemonic=65 -tab.general=\u4E00\u822C\u4FE1\u606F(G) -tab.general.vkMnemonic=71 -tab.pagesetup=\u9875\u9762\u8BBE\u7F6E(S) -tab.pagesetup.vkMnemonic=83 +tab.appearance=\u5916\u89C2(&A) +tab.general=\u4E00\u822C\u4FE1\u606F(&G) +tab.pagesetup=\u9875\u9762\u8BBE\u7F6E(&S) # error.pagerange=\u65E0\u6548\u7684\u9875\u9762\u8303\u56F4; \u8BF7\u91CD\u65B0\u8F93\u5165\u6570\u503C (\u4F8B\u5982 1-3,5,7-10) error.destination=\u65E0\u6548\u7684\u6587\u4EF6\u540D; \u8BF7\u91CD\u8BD5 diff --git a/src/share/classes/sun/print/resources/serviceui_zh_TW.properties b/src/share/classes/sun/print/resources/serviceui_zh_TW.properties index d6a796325eac375b7a1a8b23954673b48fd43f7a..41ce68ca516e786444696bbe2639719ae97b5336 100644 --- a/src/share/classes/sun/print/resources/serviceui_zh_TW.properties +++ b/src/share/classes/sun/print/resources/serviceui_zh_TW.properties @@ -14,15 +14,11 @@ border.margins=\u908A\u8DDD button.cancel=\u53D6\u6D88 button.ok=\u78BA\u5B9A button.print=\u5217\u5370 -button.properties=\u7279\u6027(R)... -button.properties.mnemonic=R +button.properties=\u7279\u6027(&R)... # -checkbox.collate=\u7406\u5E8F(C) -checkbox.collate.mnemonic=C -checkbox.jobsheets=\u6A19\u984C\u9801(B) -checkbox.jobsheets.mnemonic=B -checkbox.printtofile=\u5217\u5370\u81F3\u6A94\u6848(F) -checkbox.printtofile.mnemonic=F +checkbox.collate=\u7406\u5E8F(&C) +checkbox.jobsheets=\u6A19\u984C\u9801(&B) +checkbox.printtofile=\u5217\u5370\u81F3\u6A94\u6848(&F) # dialog.printtitle=\u5217\u5370 dialog.pstitle=\u9801\u9762\u8A2D\u5B9A @@ -33,70 +29,42 @@ dialog.noprintermsg=\u627E\u4E0D\u5230\u5217\u5370\u670D\u52D9\u3002 dialog.writeerror=\u7121\u6CD5\u5BEB\u5165\u81F3\u6A94\u6848: # label.info=\u8CC7\u8A0A: -label.jobname=\u5DE5\u4F5C\u540D\u7A31(J): -label.jobname.mnemonic=J -label.numcopies=\u5217\u5370\u4EFD\u6578(O): -label.numcopies.mnemonic=O -label.priority=\u512A\u5148\u6B0A(R): -label.priority.mnemonic=R -label.psname=\u540D\u7A31(N): -label.psname.mnemonic=N +label.jobname=\u5DE5\u4F5C\u540D\u7A31(&J): +label.numcopies=\u5217\u5370\u4EFD\u6578(&O): +label.priority=\u512A\u5148\u6B0A(&R): +label.psname=\u540D\u7A31(&N): label.pstype=\u985E\u578B: label.rangeto=\u81F3 -label.size=\u5927\u5C0F(Z): -label.size.mnemonic=Z -label.source=\u4F86\u6E90(C): -label.source.mnemonic=C +label.size=\u5927\u5C0F(&Z): +label.source=\u4F86\u6E90(&C): label.status=\u72C0\u614B: -label.username=\u4F7F\u7528\u8005\u540D\u7A31(U): -label.username.mnemonic=U +label.username=\u4F7F\u7528\u8005\u540D\u7A31(&U): label.millimetres=(mm) label.inches=(in) -label.topmargin=\u9802\u7AEF\u908A\u8DDD(T) -label.topmargin.mnemonic=T -label.bottommargin=\u5E95\u90E8\u908A\u8DDD(B) -label.bottommargin.mnemonic=B -label.leftmargin=\u5DE6\u908A\u8DDD(F) -label.leftmargin.mnemonic=F -label.rightmargin=\u53F3\u908A\u8DDD(R) -label.rightmargin.mnemonic=R +label.topmargin=\u9802\u7AEF\u908A\u8DDD(&T) +label.bottommargin=\u5E95\u90E8\u908A\u8DDD(&B) +label.leftmargin=\u5DE6\u908A\u8DDD(&F) +label.rightmargin=\u53F3\u908A\u8DDD(&R) # -radiobutton.color=\u984F\u8272(C) -radiobutton.color.mnemonic=C -radiobutton.draftq=\u8349\u7A3F(F) -radiobutton.draftq.mnemonic=F -radiobutton.duplex=\u96D9\u9762\u5217\u5370(D) -radiobutton.duplex.mnemonic=D -radiobutton.highq=\u9AD8(H) -radiobutton.highq.mnemonic=H -radiobutton.landscape=\u6A6B\u5411(L) -radiobutton.landscape.mnemonic=L -radiobutton.monochrome=\u55AE\u8272(M) -radiobutton.monochrome.mnemonic=M -radiobutton.normalq=\u6B63\u5E38(N) -radiobutton.normalq.mnemonic=N -radiobutton.oneside=\u55AE\u9762(O) -radiobutton.oneside.mnemonic=O -radiobutton.portrait=\u76F4\u5411(P) -radiobutton.portrait.mnemonic=P -radiobutton.rangeall=\u5168\u90E8(L) -radiobutton.rangeall.mnemonic=L -radiobutton.rangepages=\u9801\u9762(E) -radiobutton.rangepages.mnemonic=E -radiobutton.revlandscape=\u53CD\u5411\u6A6B\u5370(N) -radiobutton.revlandscape.mnemonic=N -radiobutton.revportrait=\u53CD\u5411\u76F4\u5370(I) -radiobutton.revportrait.mnemonic=I -radiobutton.tumble=\u7FFB\u8F49(T) -radiobutton.tumble.mnemonic=T +radiobutton.color=\u984F\u8272(&C) +radiobutton.draftq=\u8349\u7A3F(&F) +radiobutton.duplex=\u96D9\u9762\u5217\u5370(&D) +radiobutton.highq=\u9AD8(&H) +radiobutton.landscape=\u6A6B\u5411(&L) +radiobutton.monochrome=\u55AE\u8272(&M) +radiobutton.normalq=\u6B63\u5E38(&N) +radiobutton.oneside=\u55AE\u9762(&O) +radiobutton.portrait=\u76F4\u5411(&P) +radiobutton.rangeall=\u5168\u90E8(&L) +radiobutton.rangepages=\u9801\u9762(&E) +radiobutton.revlandscape=\u53CD\u5411\u6A6B\u5370(&N) +radiobutton.revportrait=\u53CD\u5411\u76F4\u5370(&I) +radiobutton.tumble=\u7FFB\u8F49(&T) # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A -tab.appearance=\u5916\u89C0(A) -tab.appearance.vkMnemonic=65 -tab.general=\u4E00\u822C(G) -tab.general.vkMnemonic=71 -tab.pagesetup=\u9801\u9762\u8A2D\u5B9A(S) -tab.pagesetup.vkMnemonic=83 +tab.appearance=\u5916\u89C0(&A) +tab.general=\u4E00\u822C(&G) +tab.pagesetup=\u9801\u9762\u8A2D\u5B9A(&S) # error.pagerange=\u7121\u6548\u7684\u9801\u9762\u7BC4\u570D; \u8ACB\u91CD\u65B0\u8F38\u5165\u6578\u503C (\u4F8B\u5982 1-3,5,7-10) error.destination=\u7121\u6548\u7684\u6A94\u540D; \u8ACB\u518D\u8A66\u4E00\u6B21 diff --git a/src/share/classes/sun/util/logging/PlatformLogger.java b/src/share/classes/sun/util/logging/PlatformLogger.java index df88de5bdd4c853b83e24c0a9d577781a480026c..30700a06b0bba941d63b181ce04710f9383ffd19 100644 --- a/src/share/classes/sun/util/logging/PlatformLogger.java +++ b/src/share/classes/sun/util/logging/PlatformLogger.java @@ -516,6 +516,9 @@ public class PlatformLogger { } void doLog(int level, String msg, Object... params) { + if (!isLoggable(level)) { + return; + } // only pass String objects to the j.u.l.Logger which may // be created by untrusted code int len = (params != null) ? params.length : 0; diff --git a/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java b/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java index 253fa4d1da05e150cebf732f0a29160d732fe983..5a08630acdc744f322448bd49d5ec5a1eea9e5b1 100644 --- a/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java +++ b/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java @@ -657,10 +657,13 @@ class XTextAreaPeer extends XComponentPeer implements TextAreaPeer { } - // TODO : fix this duplicate code - class XAWTCaret extends DefaultCaret { + static class XAWTCaret extends DefaultCaret { public void focusGained(FocusEvent e) { super.focusGained(e); + if (getComponent().isEnabled()){ + // Make sure the cursor is visible in case of non-editable TextArea + super.setVisible(true); + } getComponent().repaint(); } diff --git a/src/solaris/classes/sun/awt/X11/XTextFieldPeer.java b/src/solaris/classes/sun/awt/X11/XTextFieldPeer.java index 6e3b78d14980eb82cfc3d5fc1b834a0c2d791c50..c67a2be1f5f31f7cb84431f8a49f57c0326e6047 100644 --- a/src/solaris/classes/sun/awt/X11/XTextFieldPeer.java +++ b/src/solaris/classes/sun/awt/X11/XTextFieldPeer.java @@ -578,31 +578,7 @@ public class XTextFieldPeer extends XComponentPeer implements TextFieldPeer { } protected Caret createCaret() { - return new XAWTCaret(); - } - } - - class XAWTCaret extends DefaultCaret { - public void focusGained(FocusEvent e) { - super.focusGained(e); - getComponent().repaint(); - } - - public void focusLost(FocusEvent e) { - super.focusLost(e); - getComponent().repaint(); - } - - // Fix for 5100950: textarea.getSelectedText() returns the de-selected text, on XToolkit - // Restoring Motif behaviour - // If the text is unhighlighted then we should sets the selection range to zero - public void setSelectionVisible(boolean vis) { - if (vis){ - super.setSelectionVisible(vis); - }else{ - // In order to de-select the selection - setDot(getDot()); - } + return new XTextAreaPeer.XAWTCaret(); } } diff --git a/test/java/awt/Frame/FrameStateTest/FrameStateTest.html b/test/java/awt/Frame/FrameStateTest/FrameStateTest.html new file mode 100644 index 0000000000000000000000000000000000000000..5c88ac2d1d85a7879bbf8f93721a98fbde15cc80 --- /dev/null +++ b/test/java/awt/Frame/FrameStateTest/FrameStateTest.html @@ -0,0 +1,50 @@ + + + + + FrameStateTest + + + +

FrameStateTest
Bug ID: 4157271

+

This test checks that when setState(Frame.ICONIFIED) is called before + setVisible(true) the Frame is shown in the proper iconified state. + The problem was that it did not honor the initial iconic state, but + instead was shown in the NORMAL state.

+

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

+ + + + diff --git a/test/java/awt/Frame/FrameStateTest/FrameStateTest.java b/test/java/awt/Frame/FrameStateTest/FrameStateTest.java new file mode 100644 index 0000000000000000000000000000000000000000..33ea9b304ff1733a8ed7a2ee4a317c153d6d325c --- /dev/null +++ b/test/java/awt/Frame/FrameStateTest/FrameStateTest.java @@ -0,0 +1,459 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + test + @bug 4157271 + @summary Checks that when a Frame is created it honors the state it + was set to. The bug was that if setState(Frame.ICONIFIED) was + called before setVisible(true) the Frame would be shown in NORMAL + state instead of ICONIFIED. + @author JTG East Team: area=awt.Frame + @run applet/manual=yesno FrameStateTest.html +*/ + +/** + * FrameStateTest.java + * + * summary: Checks that when setState(Frame.ICONIFIED) is called before + * setVisible(true) the Frame is shown in the proper iconified state. + * The problem was that it did not honor the initial iconic state, but + * instead was shown in the NORMAL state. + */ + +import java.awt.event.*; +import java.awt.*; +import java.lang.*; +import java.applet.Applet; + + +public class FrameStateTest extends Applet implements ActionListener, ItemListener{ + + Button btnCreate = new Button("Create Frame"); + Button btnDispose = new Button("Dispose Frame"); + CheckboxGroup cbgState = new CheckboxGroup(); + CheckboxGroup cbgResize = new CheckboxGroup(); + Checkbox cbIconState = new Checkbox("Frame state ICONIFIED",cbgState,false); + Checkbox cbNormState = new Checkbox("Frame state NORMAL",cbgState,true); + Checkbox cbNonResize = new Checkbox("Frame Nonresizable",cbgResize,false); + Checkbox cbResize = new Checkbox("Frame Resizable",cbgResize,true); + int iState = 0; + boolean bResize = true; + CreateFrame icontst; + + public void init() { + this.setLayout (new BorderLayout ()); + + String[] instructions = + { + "Steps to try to reproduce this problem:", + "When this test is run an Applet Viewer window will display. In the", + "Applet Viewer window select the different options for the Frame (i.e.", + "{Normal, Non-resizalbe}, {Normal, Resizable}, {Iconified, Resizable},", + "{Iconified, Non-resizalbe}). After chosing the Frame's state click the", + "Create Frame button. After the Frame (Frame State Test (Window2)) comes", + "up make sure the proper behavior occurred (Frame shown in proper state).", + "Click the Dispose button to close the Frame. Do the above steps for all", + "the different Frame state combinations available. If you observe the", + "proper behavior the test has passed, Press the Pass button. Otherwise", + "the test has failed, Press the Fail button.", + "Note: In Frame State Test (Window2) you can also chose the different", + "buttons to see different Frame behavior. An example of a problem that", + "has been seen, With the Frame nonresizable you can not iconify the Frame." + }; + Sysout.createDialogWithInstructions( instructions ); + + btnDispose.setEnabled(false); + add(btnCreate, BorderLayout.NORTH); + add(btnDispose, BorderLayout.SOUTH); + + Panel p = new Panel(new GridLayout(0,1)); + p.add(cbIconState); + p.add(cbResize); + add(p, BorderLayout.WEST); + + p = new Panel(new GridLayout(0,1)); + p.add(cbNormState); + p.add(cbNonResize); + add(p, BorderLayout.EAST); + + // Add Listeners + btnDispose.addActionListener(this); + btnCreate.addActionListener(this); + cbNormState.addItemListener(this); + cbResize.addItemListener(this); + cbIconState.addItemListener(this); + cbNonResize.addItemListener(this); + + resize(600, 200); + + }//End init() + + public void actionPerformed(ActionEvent evt) { + + + if (evt.getSource() == btnCreate) { + btnCreate.setEnabled(false); + btnDispose.setEnabled(true); + icontst = new CreateFrame(iState, bResize); + icontst.show(); + } else if (evt.getSource() == btnDispose) { + btnCreate.setEnabled(true); + btnDispose.setEnabled(false); + icontst.dispose(); + } + } + + public void itemStateChanged(ItemEvent evt) { + + if (cbNormState.getState()) iState = 0; + if (cbIconState.getState()) iState = 1; + if (cbResize.getState()) bResize = true; + if (cbNonResize.getState()) bResize = false; + + } + +}// class FrameStateTest + + +class CreateFrame extends Frame implements ActionListener , WindowListener { + + static int e=0; + static int u=0; + static int p=0; + static int i=0; + static int v=0; + + Button b1, b2, b3, b4, b5, b6, b7; + boolean resizable = true; + boolean iconic = false; + String name = "Frame State Test"; + + CreateFrame (int iFrameState, boolean bFrameResizable) { + + setTitle("Frame State Test (Window 2)"); + + if (iFrameState == 1) { + iconic = true; + } + + if (!(bFrameResizable)) { + resizable = false; + } + + System.out.println("CREATING FRAME - Initially "+ + ((iconic) ? "ICONIFIED" : "NORMAL (NON-ICONIFIED)") + " and " + + ((resizable) ? "RESIZABLE" : "NON-RESIZABLE") ); + + Sysout.println("CREATING FRAME - Initially "+ + ((iconic) ? "ICONIFIED" : "NORMAL (NON-ICONIFIED)") + " and " + + ((resizable) ? "RESIZABLE" : "NON-RESIZABLE") ); + + setLayout(new FlowLayout() ); + b1 = new Button("resizable"); + add(b1); + b2 = new Button("resize"); + add(b2); + b3 = new Button("iconify"); + add(b3); + b4 = new Button("iconify and restore"); + add(b4); + b5 = new Button("hide and show"); + add(b5); + b6 = new Button("hide, iconify and show"); + add(b6); + b7 = new Button("hide, iconify, show, and restore"); + add(b7); + b1.addActionListener(this); + b2.addActionListener(this); + b3.addActionListener(this); + b4.addActionListener(this); + b5.addActionListener(this); + b6.addActionListener(this); + b7.addActionListener(this); + addWindowListener(this); + + setBounds(100,2,200, 200); + setState(iconic ? Frame.ICONIFIED: Frame.NORMAL); + setResizable(resizable); + pack(); + setVisible(true); + + } + + public void actionPerformed ( ActionEvent e ) + { + if ( e.getSource() == b2 ) { + Rectangle r = this.getBounds(); + r.width += 10; + System.out.println(" - button pressed - setting bounds on Frame to: "+r); + setBounds(r); + validate(); + } else if ( e.getSource() == b1 ) { + resizable = !resizable; + System.out.println(" - button pressed - setting Resizable to: "+resizable); + ((Frame)(b1.getParent())).setResizable(resizable); + } else if ( e.getSource() == b3 ) { + System.out.println(" - button pressed - setting Iconic: "); + dolog(); + ((Frame)(b1.getParent())).setState(Frame.ICONIFIED); + dolog(); + } else if ( e.getSource() == b4 ) { + System.out.println(" - button pressed - setting Iconic: "); + dolog(); + ((Frame)(b1.getParent())).setState(Frame.ICONIFIED); + dolog(); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - now restoring: "); + ((Frame)(b1.getParent())).setState(Frame.NORMAL); + dolog(); + } else if ( e.getSource() == b5 ) { + System.out.println(" - button pressed - hiding : "); + dolog(); + ((Frame)(b1.getParent())).setVisible(false); + dolog(); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - now reshowing: "); + ((Frame)(b1.getParent())).setVisible(true); + dolog(); + } else if ( e.getSource() == b6 ) { + System.out.println(" - button pressed - hiding : "); + dolog(); + ((Frame)(b1.getParent())).setVisible(false); + dolog(); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - setting Iconic: "); + dolog(); + ((Frame)(b1.getParent())).setState(Frame.ICONIFIED); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - now reshowing: "); + ((Frame)(b1.getParent())).setVisible(true); + dolog(); + } else if ( e.getSource() == b7 ) { + System.out.println(" - button pressed - hiding : "); + dolog(); + ((Frame)(b1.getParent())).setVisible(false); + dolog(); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - setting Iconic: "); + dolog(); + ((Frame)(b1.getParent())).setState(Frame.ICONIFIED); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - now reshowing: "); + ((Frame)(b1.getParent())).setVisible(true); + dolog(); + try { + Thread.sleep(1000); + } catch (Exception ex) {}; + System.out.println(" - now restoring: "); + ((Frame)(b1.getParent())).setState(Frame.NORMAL); + dolog(); + } + } + + public void windowActivated(WindowEvent e) { + System.out.println(name + " Activated"); + dolog(); + } + public void windowClosed(WindowEvent e) { + System.out.println(name + " Closed"); + dolog(); + } + public void windowClosing(WindowEvent e) { + ((Window)(e.getSource())).dispose(); + System.out.println(name + " Closing"); + dolog(); + } + public void windowDeactivated(WindowEvent e) { + System.out.println(name + " Deactivated"); + dolog(); + } + public void windowDeiconified(WindowEvent e) { + System.out.println(name + " Deiconified"); + dolog(); + } + public void windowIconified(WindowEvent e) { + System.out.println(name + " Iconified"); + dolog(); + } + public void windowOpened(WindowEvent e) { + System.out.println(name + " Opened"); + dolog(); + } + + public void dolog() { + System.out.println(" getState returns: "+getState()); + } +} + +// }// class FrameStateTest + +/**************************************************** + 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; + int scrollNone = TextArea.SCROLLBARS_NONE; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 10, 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/test/java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java b/test/java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java new file mode 100644 index 0000000000000000000000000000000000000000..57637710a16336f22b72a432dc315a3b84305419 --- /dev/null +++ b/test/java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7154048 + * @summary Window created under a mouse does not receive mouse enter event. + * Mouse Entered/Exited events should be generated during dragging the window + * out of the frame and to the frame. + * @library ../../regtesthelpers + * @build Util + * @author alexandr.scherbatiy area=awt.event + * @run main DragWindowOutOfFrameTest + */ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +import java.util.concurrent.*; +import sun.awt.SunToolkit; + +import test.java.awt.regtesthelpers.Util; + +public class DragWindowOutOfFrameTest { + + private static volatile int dragWindowMouseEnteredCount = 0; + private static volatile int dragWindowMouseExitedCount = 0; + private static volatile int dragWindowMouseReleasedCount = 0; + private static volatile int buttonMouseEnteredCount = 0; + private static volatile int buttonMouseExitedCount = 0; + private static volatile int labelMouseEnteredCount = 0; + private static volatile int labelMouseExitedCount = 0; + private static volatile int labelMouseReleasedCount = 0; + private static MyDragWindow dragWindow; + private static JLabel label; + private static JButton button; + + public static void main(String[] args) throws Exception { + + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(50); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + createAndShowGUI(); + } + }); + + toolkit.realSync(); + + Point pointToClick = Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + return getCenterPoint(label); + } + }); + + + robot.mouseMove(pointToClick.x, pointToClick.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + if (dragWindowMouseEnteredCount != 1 && dragWindowMouseExitedCount != 0) { + throw new RuntimeException( + "Wrong number mouse Entered/Exited events on Drag Window!"); + } + + Point pointToDrag = Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + label.addMouseListener(new LabelMouseListener()); + button.addMouseListener(new ButtonMouseListener()); + return getCenterPoint(button); + } + }); + + robot.mouseMove(450, pointToClick.y); + toolkit.realSync(); + + if (labelMouseEnteredCount != 0 && labelMouseExitedCount != 1) { + throw new RuntimeException( + "Wrong number Mouse Entered/Exited events on label!"); + } + + robot.mouseMove(450, pointToDrag.y); + toolkit.realSync(); + + if (labelMouseEnteredCount != 0 && labelMouseExitedCount != 1) { + throw new RuntimeException( + "Wrong number Mouse Entered/Exited events on label!"); + } + + if (buttonMouseEnteredCount != 0 && buttonMouseExitedCount != 0) { + throw new RuntimeException( + "Wrong number Mouse Entered/Exited events on button!"); + } + + robot.mouseMove(pointToDrag.y, pointToDrag.y); + toolkit.realSync(); + + if (buttonMouseEnteredCount != 1 && buttonMouseExitedCount != 0) { + throw new RuntimeException( + "Wrong number Mouse Entered/Exited events on button!"); + } + + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + if (labelMouseReleasedCount != 1) { + throw new RuntimeException("No MouseReleased event on label!"); + } + } + + private static Point getCenterPoint(Component comp) { + Point p = comp.getLocationOnScreen(); + Rectangle rect = comp.getBounds(); + return new Point(p.x + rect.width / 2, p.y + rect.height / 2); + } + + private static void createAndShowGUI() { + + JFrame frame = new JFrame("Main Frame"); + frame.setLocation(100, 100); + frame.setSize(300, 200); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + label = new JLabel("Label"); + + DragWindowCreationMouseListener listener = new DragWindowCreationMouseListener(frame); + label.addMouseListener(listener); + label.addMouseMotionListener(listener); + + button = new JButton("Button"); + Panel panel = new Panel(new BorderLayout()); + + panel.add(label, BorderLayout.NORTH); + panel.add(button, BorderLayout.CENTER); + + frame.getContentPane().add(panel); + frame.setVisible(true); + + } + + private static Point getAbsoluteLocation(MouseEvent e) { + return new Point(e.getXOnScreen(), e.getYOnScreen()); + } + + static class MyDragWindow extends Window { + + public MyDragWindow(Window parent, Point location) { + super(parent); + setSize(500, 300); + setVisible(true); + JPanel panel = new JPanel(); + add(panel); + setLocation(location.x - 250, location.y - 150); + addMouseListener(new DragWindowMouseListener()); + } + + void dragTo(Point point) { + setLocation(point.x - 250, point.y - 150); + } + } + + static class DragWindowCreationMouseListener extends MouseAdapter { + + Point origin; + Window parent; + + public DragWindowCreationMouseListener(Window parent) { + this.parent = parent; + } + + @Override + public void mousePressed(MouseEvent e) { + if (dragWindow == null) { + dragWindow = new MyDragWindow(parent, getAbsoluteLocation(e)); + } else { + dragWindow.setVisible(true); + dragWindow.dragTo(getAbsoluteLocation(e)); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + labelMouseReleasedCount++; + if (dragWindow != null) { + dragWindow.setVisible(false); + } + } + + public void mouseDragged(MouseEvent e) { + if (dragWindow != null) { + dragWindow.dragTo(getAbsoluteLocation(e)); + } + } + } + + static class DragWindowMouseListener extends MouseAdapter { + + @Override + public void mouseEntered(MouseEvent e) { + dragWindowMouseEnteredCount++; + } + + @Override + public void mouseExited(MouseEvent e) { + dragWindowMouseExitedCount++; + } + + @Override + public void mouseReleased(MouseEvent e) { + dragWindowMouseReleasedCount++; + } + } + + static class LabelMouseListener extends MouseAdapter { + + @Override + public void mouseEntered(MouseEvent e) { + labelMouseEnteredCount++; + } + + @Override + public void mouseExited(MouseEvent e) { + labelMouseExitedCount++; + } + } + + static class ButtonMouseListener extends MouseAdapter { + + @Override + public void mouseEntered(MouseEvent e) { + buttonMouseEnteredCount++; + } + + @Override + public void mouseExited(MouseEvent e) { + buttonMouseExitedCount++; + } + } +} diff --git a/test/java/awt/Mouse/EnterExitEvents/DragWindowTest.java b/test/java/awt/Mouse/EnterExitEvents/DragWindowTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ccba2bcb7b09eb9680a5ca04fe11caaff7d794b3 --- /dev/null +++ b/test/java/awt/Mouse/EnterExitEvents/DragWindowTest.java @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7154048 + * @summary Window created under a mouse does not receive mouse enter event. + * Mouse Entered/Exited events are wrongly generated during dragging the window + * from one component to another + * @library ../../regtesthelpers + * @build Util + * @author alexandr.scherbatiy area=awt.event + * @run main DragWindowTest + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +import java.util.concurrent.*; +import sun.awt.SunToolkit; + +import test.java.awt.regtesthelpers.Util; + +public class DragWindowTest { + + private static volatile int dragWindowMouseEnteredCount = 0; + private static volatile int dragWindowMouseReleasedCount = 0; + private static volatile int buttonMouseEnteredCount = 0; + private static volatile int labelMouseReleasedCount = 0; + private static MyDragWindow dragWindow; + private static JLabel label; + private static JButton button; + + public static void main(String[] args) throws Exception { + + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(50); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + createAndShowGUI(); + } + }); + + toolkit.realSync(); + + Point pointToClick = Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + return getCenterPoint(label); + } + }); + + + robot.mouseMove(pointToClick.x, pointToClick.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + if (dragWindowMouseEnteredCount != 1) { + throw new RuntimeException("No MouseEntered event on Drag Window!"); + } + + Point pointToDrag = Util.invokeOnEDT(new Callable() { + + @Override + public Point call() throws Exception { + button.addMouseListener(new ButtonMouseListener()); + return getCenterPoint(button); + } + }); + + robot.mouseMove(pointToDrag.x, pointToDrag.y); + toolkit.realSync(); + + if (buttonMouseEnteredCount != 0) { + throw new RuntimeException("Extra MouseEntered event on button!"); + } + + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + + if (labelMouseReleasedCount != 1) { + throw new RuntimeException("No MouseReleased event on label!"); + } + + } + + private static Point getCenterPoint(Component comp) { + Point p = comp.getLocationOnScreen(); + Rectangle rect = comp.getBounds(); + return new Point(p.x + rect.width / 2, p.y + rect.height / 2); + } + + private static void createAndShowGUI() { + + JFrame frame = new JFrame("Main Frame"); + frame.setSize(300, 200); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + label = new JLabel("Label"); + + LabelMouseListener listener = new LabelMouseListener(frame); + label.addMouseListener(listener); + label.addMouseMotionListener(listener); + + button = new JButton("Button"); + Panel panel = new Panel(new BorderLayout()); + + panel.add(label, BorderLayout.NORTH); + panel.add(button, BorderLayout.CENTER); + + frame.getContentPane().add(panel); + frame.setVisible(true); + + } + + private static Point getAbsoluteLocation(MouseEvent e) { + return new Point(e.getXOnScreen(), e.getYOnScreen()); + } + + static class MyDragWindow extends Window { + + static int d = 30; + + public MyDragWindow(Window parent, Point location) { + super(parent); + setSize(150, 150); + setVisible(true); + JPanel panel = new JPanel(); + add(panel); + setLocation(location.x - d, location.y - d); + addMouseListener(new DragWindowMouseListener()); + } + + void dragTo(Point point) { + setLocation(point.x - d, point.y - d); + } + } + + static class LabelMouseListener extends MouseAdapter { + + Point origin; + Window parent; + + public LabelMouseListener(Window parent) { + this.parent = parent; + } + + @Override + public void mousePressed(MouseEvent e) { + if (dragWindow == null) { + dragWindow = new MyDragWindow(parent, getAbsoluteLocation(e)); + } else { + dragWindow.setVisible(true); + dragWindow.dragTo(getAbsoluteLocation(e)); + } + } + + @Override + public void mouseReleased(MouseEvent e) { + labelMouseReleasedCount++; + if (dragWindow != null) { + dragWindow.setVisible(false); + } + } + + public void mouseDragged(MouseEvent e) { + if (dragWindow != null) { + dragWindow.dragTo(getAbsoluteLocation(e)); + } + } + } + + static class DragWindowMouseListener extends MouseAdapter { + + @Override + public void mouseEntered(MouseEvent e) { + dragWindowMouseEnteredCount++; + } + + @Override + public void mouseReleased(MouseEvent e) { + dragWindowMouseReleasedCount++; + } + } + + static class ButtonMouseListener extends MouseAdapter { + + @Override + public void mouseEntered(MouseEvent e) { + buttonMouseEnteredCount++; + } + } +} diff --git a/test/java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java b/test/java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9a9042b1a7055e2e29c9145d45288f09a50ace06 --- /dev/null +++ b/test/java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7154048 + * @summary Programmatically resized window does not receive mouse entered/exited events + * @author alexandr.scherbatiy area=awt.event + * @run main ResizingFrameTest + */ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import sun.awt.SunToolkit; + +public class ResizingFrameTest { + + private static volatile int mouseEnteredCount = 0; + private static volatile int mouseExitedCount = 0; + private static JFrame frame; + + public static void main(String[] args) throws Exception { + + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(50); + robot.mouseMove(100, 100); + + // create a frame under the mouse cursor + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + createAndShowGUI(); + } + }); + + + toolkit.realSync(); + + if (mouseEnteredCount != 1 || mouseExitedCount != 0) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // iconify frame + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setExtendedState(Frame.ICONIFIED); + } + }); + + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 1 || mouseExitedCount != 1) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // deiconify frame + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setExtendedState(Frame.NORMAL); + } + }); + + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 2 || mouseExitedCount != 1) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // move the mouse out of the frame + robot.mouseMove(500, 500); + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 2 || mouseExitedCount != 2) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // maximize the frame + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setExtendedState(Frame.MAXIMIZED_BOTH); + } + }); + + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 3 || mouseExitedCount != 2) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + + // demaximize the frame + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setExtendedState(Frame.NORMAL); + } + }); + + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 3 || mouseExitedCount != 3) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + + } + + // move the frame under the mouse + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setLocation(400, 400); + } + }); + + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 4 || mouseExitedCount != 3) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // move the frame out of the mouse + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setLocation(100, 100); + } + }); + + toolkit.realSync(); + robot.delay(400); + + if (mouseEnteredCount != 4 || mouseExitedCount != 4) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // enlarge the frame bounds + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setBounds(100, 100, 800, 800); + } + }); + + toolkit.realSync(); + robot.delay(200); + + if (mouseEnteredCount != 5 || mouseExitedCount != 4) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + + // make the frame bounds smaller + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + frame.setBounds(100, 100, 200, 300); + } + }); + + toolkit.realSync(); + robot.delay(400); + + + if (mouseEnteredCount != 5 || mouseExitedCount != 5) { + throw new RuntimeException("No Mouse Entered/Exited events!"); + } + } + + private static void createAndShowGUI() { + + frame = new JFrame("Main Frame"); + frame.setSize(300, 200); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + frame.addMouseListener(new MouseAdapter() { + + @Override + public void mouseEntered(MouseEvent e) { + mouseEnteredCount++; + } + + @Override + public void mouseExited(MouseEvent e) { + mouseExitedCount++; + } + }); + + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java b/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java new file mode 100644 index 0000000000000000000000000000000000000000..188cd3fde86c6fc7eafd3820f82594964067df74 --- /dev/null +++ b/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Portions Copyright (c) 2012 IBM Corporation + */ + + +/* @test + * @bug 7129742 + * @summary Focus in non-editable TextArea is not shown on Linux. + * @author Sean Chou + */ + +import java.awt.FlowLayout; +import java.awt.TextArea; +import java.awt.Toolkit; +import java.lang.reflect.Field; + +import javax.swing.JFrame; +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import javax.swing.text.DefaultCaret; + +import sun.awt.SunToolkit; + +public class bug7129742 { + + public static DefaultCaret caret = null; + public static JFrame frame = null; + public static boolean fastreturn = false; + + public static void main(String[] args) throws Exception { + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new JFrame("Test"); + TextArea textArea = new TextArea("Non-editable textArea"); + textArea.setEditable(false); + frame.setLayout(new FlowLayout()); + frame.add(textArea); + frame.pack(); + frame.setVisible(true); + + try { + Class XTextAreaPeerClzz = textArea.getPeer().getClass(); + System.out.println(XTextAreaPeerClzz.getName()); + if (!XTextAreaPeerClzz.getName().equals("sun.awt.X11.XTextAreaPeer")) { + fastreturn = true; + return; + } + + Field jtextField = XTextAreaPeerClzz.getDeclaredField("jtext"); + jtextField.setAccessible(true); + JTextArea jtext = (JTextArea)jtextField.get(textArea.getPeer()); + caret = (DefaultCaret) jtext.getCaret(); + + textArea.requestFocusInWindow(); + } catch (NoSuchFieldException | SecurityException + | IllegalArgumentException | IllegalAccessException e) { + /* These exceptions mean the implementation of XTextAreaPeer is + * changed, this testcase is not valid any more, fix it or remove. + */ + frame.dispose(); + throw new RuntimeException("This testcase is not valid any more!"); + } + } + }); + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + try{ + if (fastreturn) { + return; + } + boolean passed = caret.isActive(); + System.out.println("is caret visible : " + passed); + + if (!passed) { + throw new RuntimeException("The test for bug 71297422 failed"); + } + } finally { + frame.dispose(); + } + } + }); + } + +} diff --git a/test/java/awt/regtesthelpers/Util.java b/test/java/awt/regtesthelpers/Util.java index 5774e0bb732d4171de0aeca2d41fea809f675299..42be600eef18930062ea337db7d638f044e16bbe 100644 --- a/test/java/awt/regtesthelpers/Util.java +++ b/test/java/awt/regtesthelpers/Util.java @@ -600,4 +600,34 @@ public final class Util { time, printEvent); } + + + /** + * Invokes the task on the EDT thread. + * + * @return result of the task + */ + public static T invokeOnEDT(final java.util.concurrent.Callable task) throws Exception { + final java.util.List result = new java.util.ArrayList(1); + final Exception[] exception = new Exception[1]; + + javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + try { + result.add(task.call()); + } catch (Exception e) { + exception[0] = e; + } + } + }); + + if (exception[0] != null) { + throw exception[0]; + } + + return result.get(0); + } + } diff --git a/test/javax/swing/JComponent/7154030/bug7154030.java b/test/javax/swing/JComponent/7154030/bug7154030.java new file mode 100644 index 0000000000000000000000000000000000000000..50007435b55a15bf1d64b4e254174e388de12d8d --- /dev/null +++ b/test/javax/swing/JComponent/7154030/bug7154030.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Portions Copyright (c) 2012 IBM Corporation + */ + +import javax.swing.JButton; +import javax.swing.JDesktopPane; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; +import sun.awt.SunToolkit; + +import java.awt.AWTException; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; + +/* @test 1.1 2012/04/12 + * @bug 7154030 + * @summary Swing components fail to hide after calling hide() + * @author Jonathan Lu + * @library ../../regtesthelpers/ + * @build Util + * @run main bug7154030 + */ + +public class bug7154030 { + + private static JButton button = null; + + public static void main(String[] args) throws Exception { + BufferedImage imageInit = null; + + BufferedImage imageShow = null; + + BufferedImage imageHide = null; + + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + + Robot robot = new Robot(); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + JDesktopPane desktop = new JDesktopPane(); + button = new JButton("button"); + JFrame frame = new JFrame(); + + button.setSize(200, 200); + button.setLocation(100, 100); + button.setForeground(Color.RED); + button.setBackground(Color.RED); + button.setOpaque(true); + button.setVisible(false); + desktop.add(button); + + frame.setContentPane(desktop); + frame.setSize(300, 300); + frame.setLocation(0, 0); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + } + }); + + toolkit.realSync(); + imageInit = robot.createScreenCapture(new Rectangle(0, 0, 300, 300)); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + button.show(); + } + }); + + toolkit.realSync(); + imageShow = robot.createScreenCapture(new Rectangle(0, 0, 300, 300)); + if (Util.compareBufferedImages(imageInit, imageShow)) { + throw new Exception("Failed to show opaque button"); + } + + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + button.hide(); + } + }); + + toolkit.realSync(); + imageHide = robot.createScreenCapture(new Rectangle(0, 0, 300, 300)); + + if (!Util.compareBufferedImages(imageInit, imageHide)) { + throw new Exception("Failed to hide opaque button"); + } + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + button.setOpaque(false); + button.setBackground(new Color(128, 128, 0)); + button.setVisible(false); + } + }); + + toolkit.realSync(); + imageInit = robot.createScreenCapture(new Rectangle(0, 0, 300, 300)); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + button.show(); + } + }); + + toolkit.realSync(); + imageShow = robot.createScreenCapture(new Rectangle(0, 0, 300, 300)); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + button.hide(); + } + }); + + if (Util.compareBufferedImages(imageInit, imageShow)) { + throw new Exception("Failed to show non-opaque button"); + } + + toolkit.realSync(); + imageHide = robot.createScreenCapture(new Rectangle(0, 0, 300, 300)); + + if (!Util.compareBufferedImages(imageInit, imageHide)) { + throw new Exception("Failed to hide non-opaque button"); + } + } +} diff --git a/test/javax/swing/JTable/7055065/bug7055065.java b/test/javax/swing/JTable/7055065/bug7055065.java new file mode 100644 index 0000000000000000000000000000000000000000..119d9a576540e54c49e88b73862b5318c57e7eea --- /dev/null +++ b/test/javax/swing/JTable/7055065/bug7055065.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Portions Copyright (c) 2012 IBM Corporation + */ + +/* @test 1.1 2012/04/19 + * @bug 7055065 + * @summary NullPointerException when sorting JTable with empty cell + * @author Jonathan Lu + * @library ../../regtesthelpers/ + * @build Util + * @run main bug7055065 + */ + +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.SwingUtilities; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableModel; +import javax.swing.table.TableRowSorter; +import sun.awt.SunToolkit; +import java.util.concurrent.Callable; + +public class bug7055065 { + + private static JTable table; + + public static void main(String[] args) throws Exception { + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + + SwingUtilities.invokeAndWait(new Runnable() { + + public void run() { + createAndShowUI(); + } + }); + + toolkit.realSync(); + clickCell(robot, 1, 1); + Util.hitKeys(robot, KeyEvent.VK_BACK_SPACE, KeyEvent.VK_BACK_SPACE, + KeyEvent.VK_BACK_SPACE); + + toolkit.realSync(); + clickColumnHeader(robot, 1); + + toolkit.realSync(); + clickColumnHeader(robot, 1); + } + + private static void clickCell(Robot robot, final int row, final int column) + throws Exception { + Point point = Util.invokeOnEDT(new Callable() { + @Override + public Point call() throws Exception { + Rectangle rect = table.getCellRect(row, column, false); + Point point = new Point(rect.x + rect.width / 2, rect.y + + rect.height / 2); + SwingUtilities.convertPointToScreen(point, table); + return point; + } + }); + + robot.mouseMove(point.x, point.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + } + + private static void clickColumnHeader(Robot robot, final int column) + throws Exception { + Point point = Util.invokeOnEDT(new Callable() { + @Override + public Point call() throws Exception { + Rectangle rect = table.getCellRect(0, column, false); + int headerHeight = table.getTableHeader().getHeight(); + Point point = new Point(rect.x + rect.width / 2, rect.y + - headerHeight / 2); + SwingUtilities.convertPointToScreen(point, table); + return point; + } + }); + + robot.mouseMove(point.x, point.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + } + + private static void createAndShowUI() { + JFrame frame = new JFrame("SimpleTableDemo"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + JPanel newContentPane = new JPanel(); + newContentPane.setOpaque(true); + frame.setContentPane(newContentPane); + + final String[] columnNames = { "String", "Number" }; + final Object[][] data = { { "aaaa", new Integer(1) }, + { "bbbb", new Integer(3) }, { "cccc", new Integer(2) }, + { "dddd", new Integer(4) }, { "eeee", new Integer(5) } }; + table = new JTable(data, columnNames); + + table.setPreferredScrollableViewportSize(new Dimension(500, 400)); + table.setFillsViewportHeight(true); + + TableModel dataModel = new AbstractTableModel() { + + public int getColumnCount() { + return columnNames.length; + } + + public int getRowCount() { + return data.length; + } + + public Object getValueAt(int row, int col) { + return data[row][col]; + } + + public String getColumnName(int column) { + return columnNames[column]; + } + + public Class getColumnClass(int c) { + return getValueAt(0, c).getClass(); + } + + public boolean isCellEditable(int row, int col) { + return col != 5; + } + + public void setValueAt(Object aValue, int row, int column) { + data[row][column] = aValue; + } + }; + table.setModel(dataModel); + TableRowSorter sorter = new TableRowSorter( + dataModel); + table.setRowSorter(sorter); + + JScrollPane scrollPane = new JScrollPane(table); + newContentPane.add(scrollPane); + + frame.pack(); + frame.setLocation(0, 0); + frame.setVisible(true); + } +} diff --git a/test/javax/swing/JTree/4908142/bug4908142.java b/test/javax/swing/JTree/4908142/bug4908142.java new file mode 100644 index 0000000000000000000000000000000000000000..58cb1ea86f51681b7682507118f599d13b5e62d1 --- /dev/null +++ b/test/javax/swing/JTree/4908142/bug4908142.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @bug 4908142 + * @summary JList doesn't handle search function appropriately + * @author Andrey Pikalev + * @library ../../regtesthelpers + * @build Util + * @run main bug4908142 + */ +import javax.swing.*; +import javax.swing.tree.*; +import java.awt.*; +import java.awt.event.*; +import java.util.concurrent.Callable; +import sun.awt.SunToolkit; + +public class bug4908142 { + + private static JTree tree; + + public static void main(String[] args) throws Exception { + + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(50); + + SwingUtilities.invokeAndWait(new Runnable() { + + public void run() { + createAndShowGUI(); + } + }); + + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + + public void run() { + tree.requestFocus(); + tree.setSelectionRow(0); + } + }); + + toolkit.realSync(); + + + robot.keyPress(KeyEvent.VK_A); + robot.keyRelease(KeyEvent.VK_A); + robot.keyPress(KeyEvent.VK_A); + robot.keyRelease(KeyEvent.VK_A); + robot.keyPress(KeyEvent.VK_D); + robot.keyRelease(KeyEvent.VK_D); + toolkit.realSync(); + + + String sel = Util.invokeOnEDT(new Callable() { + + @Override + public String call() throws Exception { + return tree.getLastSelectedPathComponent().toString(); + } + }); + + if (!"aad".equals(sel)) { + throw new Error("The selected index should be \"aad\", but not " + sel); + } + } + + private static void createAndShowGUI() { + JFrame fr = new JFrame("Test"); + fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + String[] data = {"aaa", "aab", "aac", "aad", "ade", "bba"}; + final DefaultMutableTreeNode root = new DefaultMutableTreeNode(data[0]); + for (int i = 1; i < data.length; i++) { + DefaultMutableTreeNode node = new DefaultMutableTreeNode(data[i]); + root.add(node); + } + + tree = new JTree(root); + + JScrollPane sp = new JScrollPane(tree); + fr.getContentPane().add(sp); + fr.setSize(200, 200); + fr.setVisible(true); + } +} diff --git a/test/tools/launcher/EnvironmentVariables.java b/test/tools/launcher/EnvironmentVariables.java new file mode 100644 index 0000000000000000000000000000000000000000..06ae701a6c2a02621b3661c2e5950b49238b4ef4 --- /dev/null +++ b/test/tools/launcher/EnvironmentVariables.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * see TestSpecialArgs.java + * bug 7131021 + * summary Checks for environment variables set by the launcher + * author anthony.petrov@oracle.com: area=launcher + */ + +public class EnvironmentVariables { + public static void main(String[] args) { + if (args.length != 2) { + throw new RuntimeException("ERROR: two command line arguments expected"); + } + + String name = args[0]; + String expect = args[1]; + String key = null; + + if (!name.endsWith("*")) { + key = name; + } else { + name = name.split("\\*")[0]; + + for (String s : System.getenv().keySet()) { + if (s.startsWith(name)) { + if (key == null) { + key = s; + } else { + System.err.println("WARNING: more variables match: " + s); + } + } + } + + if (key == null) { + throw new RuntimeException("ERROR: unable to find a match for: " + name); + } + } + + System.err.println("Will check the variable named: '" + key + + "' expecting the value: '" + expect + "'"); + + if (!System.getenv().containsKey(key)) { + throw new RuntimeException("ERROR: the variable '" + key + + "' is not present in the environment"); + } + + if (!expect.equals(System.getenv().get(key))) { + throw new RuntimeException("ERROR: expected: '" + expect + + "', got: '" + System.getenv().get(key) + "'"); + } + for (String x : args) { + System.err.print(x + " "); + } + System.err.println("-----> Passed!"); + } +} + diff --git a/test/tools/launcher/TestHelper.java b/test/tools/launcher/TestHelper.java index 8fd7ffe0800c3300ebd78909c058a36fb71d0fae..ad40ead82cffb64ba82fa91931c315540c0b1b04 100644 --- a/test/tools/launcher/TestHelper.java +++ b/test/tools/launcher/TestHelper.java @@ -23,6 +23,7 @@ import java.io.StringWriter; import java.io.PrintWriter; +import java.util.Set; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; @@ -319,19 +320,28 @@ public class TestHelper { } static TestResult doExec(String...cmds) { - return doExec(null, cmds); + return doExec(null, null, cmds); } + static TestResult doExec(Map envToSet, String...cmds) { + return doExec(envToSet, null, cmds); + } /* * A method which executes a java cmd and returns the results in a container */ - static TestResult doExec(Map envToSet, String...cmds) { + static TestResult doExec(Map envToSet, + Set envToRemove, String...cmds) { String cmdStr = ""; for (String x : cmds) { cmdStr = cmdStr.concat(x + " "); } ProcessBuilder pb = new ProcessBuilder(cmds); Map env = pb.environment(); + if (envToRemove != null) { + for (String key : envToRemove) { + env.remove(key); + } + } if (envToSet != null) { env.putAll(envToSet); } diff --git a/test/tools/launcher/TestSpecialArgs.java b/test/tools/launcher/TestSpecialArgs.java new file mode 100644 index 0000000000000000000000000000000000000000..344869bfbaee7f243406201d7ef9b1490b0cd05f --- /dev/null +++ b/test/tools/launcher/TestSpecialArgs.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7124089 7131021 + * @summary Checks for MacOSX specific flags are accepted or rejected, and + * MacOSX platforms specific environment is consistent. + * @compile -XDignore.symbol.file TestSpecialArgs.java EnvironmentVariables.java + * @run main TestSpecialArgs + */ +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class TestSpecialArgs extends TestHelper { + + public static void main(String... args) { + final Map envMap = new HashMap<>(); + envMap.put("_JAVA_LAUNCHER_DEBUG", "true"); + + TestResult tr = doExec(envMap, javaCmd, "-XstartOnFirstThread", "-version"); + if (isMacOSX) { + if (!tr.contains("In same thread")) { + System.out.println(tr); + throw new RuntimeException("Error: not running in the same thread ?"); + } + if (!tr.isOK()) { + System.out.println(tr); + throw new RuntimeException("Error: arg was rejected ????"); + } + } else { + if (tr.isOK()) { + System.out.println(tr); + throw new RuntimeException("Error: argument was accepted ????"); + } + } + + tr = doExec(javaCmd, "-Xdock:/tmp/not-available", "-version"); + if (isMacOSX) { + if (!tr.isOK()) { + System.out.println(tr); + throw new RuntimeException("Error: arg was rejected ????"); + } + } else { + if (tr.isOK()) { + System.out.println(tr); + throw new RuntimeException("Error: argument was accepted ????"); + } + } + // MacOSX specific tests ensue...... + if (!isMacOSX) + return; + Set envToRemove = new HashSet<>(); + Map map = System.getenv(); + for (String s : map.keySet()) { + if (s.startsWith("JAVA_MAIN_CLASS_") + || s.startsWith("APP_NAME_") + || s.startsWith("APP_ICON_")) { + envToRemove.add(s); + } + } + runTest(envToRemove, javaCmd, "-cp", TEST_CLASSES_DIR.getAbsolutePath(), + "EnvironmentVariables", "JAVA_MAIN_CLASS_*", + "EnvironmentVariables"); + + runTest(envToRemove, javaCmd, "-cp", TEST_CLASSES_DIR.getAbsolutePath(), + "-Xdock:name=TestAppName", "EnvironmentVariables", + "APP_NAME_*", "TestAppName"); + + runTest(envToRemove, javaCmd, "-cp", TEST_CLASSES_DIR.getAbsolutePath(), + "-Xdock:icon=TestAppIcon", "EnvironmentVariables", + "APP_ICON_*", "TestAppIcon"); + } + + static void runTest(Set envToRemove, String... args) { + TestResult tr = doExec(null, envToRemove, args); + if (!tr.isOK()) { + System.err.println(tr.toString()); + throw new RuntimeException("Test Fails"); + } + } +}