Mercurial > hg > openjdk > jigsaw > jdk
changeset 7033:85a44860f5bb
Merge
author | lana |
---|---|
date | Tue, 19 Feb 2013 20:52:39 -0800 |
parents | ec1a79c3a99c (current diff) 5ea0024ba765 (diff) |
children | ca43e2761a1d |
files | src/macosx/classes/sun/lwawt/macosx/EventDispatchAccess.java |
diffstat | 41 files changed, 1172 insertions(+), 193 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Tue Feb 19 16:49:28 2013 -0800 +++ b/.hgtags Tue Feb 19 20:52:39 2013 -0800 @@ -198,3 +198,4 @@ 57d5d954462831ac353a1f40d3bb05ddb4620952 jdk8-b74 4a67fdb752b7d6329d9be9c28d3f9d6cf7eb9a3c jdk8-b75 3a263052866137b645ab86498a43693ff5c19e69 jdk8-b76 +b2fc8e31cecc35b76188e821d4c5dc0e0b74ac24 jdk8-b77
--- a/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/macosx/classes/sun/lwawt/macosx/CPrinterJob.java Tue Feb 19 20:52:39 2013 -0800 @@ -30,6 +30,8 @@ import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.awt.print.*; +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.print.*; import javax.print.attribute.PrintRequestAttributeSet; @@ -47,6 +49,8 @@ private static String sShouldNotReachHere = "Should not reach here."; + private volatile SecondaryLoop printingLoop; + private boolean noDefaultPrinter = false; private static Font defaultFont; @@ -160,11 +164,22 @@ volatile boolean onEventThread; + @Override + protected void cancelDoc() throws PrinterAbortException { + super.cancelDoc(); + if (printingLoop != null) { + printingLoop.exit(); + } + } + private void completePrintLoop() { Runnable r = new Runnable() { public void run() { synchronized(this) { performingPrinting = false; } + if (printingLoop != null) { + printingLoop.exit(); + } }}; if (onEventThread) { @@ -219,17 +234,21 @@ onEventThread = true; + printingLoop = AccessController.doPrivileged(new PrivilegedAction<SecondaryLoop>() { + @Override + public SecondaryLoop run() { + return Toolkit.getDefaultToolkit() + .getSystemEventQueue() + .createSecondaryLoop(); + } + }); + try { // Fire off the print rendering loop on the AppKit thread, and don't have // it wait and block this thread. if (printLoop(false, firstPage, lastPage)) { - // Fire off the EventConditional that will what until the condition is met, - // but will still process AWTEvent's as they occur. - new EventDispatchAccess() { - public boolean evaluate() { - return performingPrinting; - } - }.pumpEventsAndWait(); + // Start a secondary loop on EDT until printing operation is finished or cancelled + printingLoop.enter(); } } catch (Exception e) { e.printStackTrace(); @@ -253,6 +272,9 @@ performingPrinting = false; notify(); } + if (printingLoop != null) { + printingLoop.exit(); + } } // Normalize the collated, # copies, numPages, first/last pages. Need to
--- a/src/macosx/classes/sun/lwawt/macosx/EventDispatchAccess.java Tue Feb 19 16:49:28 2013 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2011, 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. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.lwawt.macosx; - -// This exists strictly to work around the fact that java.awt.Conditional isn't a public class. -// It uses java reflection to get the EventDispatchThread class and call a MacOSX only -// method on it. -// -// NOTE: This uses reflection in its implementation, so it is not for performance critical code. -// -// See java.awt.EventDispatchThread and apple.awt.CPrintJob for more. -// -public abstract class EventDispatchAccess { - public native void pumpEventsAndWait(); - public abstract boolean evaluate(); -}
--- a/src/macosx/lib/flavormap.properties Tue Feb 19 16:49:28 2013 -0800 +++ b/src/macosx/lib/flavormap.properties Tue Feb 19 20:52:39 2013 -0800 @@ -1,7 +1,7 @@ # # This properties file is used to initialize the default -# java.awt.datatransfer.SystemFlavorMap. It contains the X11 platform-specific, -# default mappings between common X11 selection atoms and platform-independent +# java.awt.datatransfer.SystemFlavorMap. It contains the Mac OS X platform-specific, +# default mappings between common Mac OS X selection atoms and platform-independent # MIME type strings, which will be converted into # java.awt.datatransfer.DataFlavors. # @@ -76,3 +76,5 @@ text/uri-list=application/x-java-file-list;class=java.util.List PNG=image/x-java-image;class=java.awt.Image JFIF=image/x-java-image;class=java.awt.Image +RICH_TEXT=text/rtf +HTML=text/html;charset=utf-8;eoln="\r\n";terminators=1
--- a/src/macosx/native/jobjc/src/core/native/SEL.m Tue Feb 19 16:49:28 2013 -0800 +++ b/src/macosx/native/jobjc/src/core/native/SEL.m Tue Feb 19 20:52:39 2013 -0800 @@ -34,7 +34,7 @@ const char *selNameAsChars = (*env)->GetStringUTFChars(env, selName, JNI_FALSE); const SEL sel = sel_registerName(selNameAsChars); (*env)->ReleaseStringUTFChars(env, selName, selNameAsChars); - return ptr_to_jlong(sel); + return ptr_to_jlong((void*)sel); } JNIEXPORT jstring JNICALL Java_com_apple_jobjc_SEL_getSelectorName
--- a/src/macosx/native/sun/awt/CPrinterJob.m Tue Feb 19 16:49:28 2013 -0800 +++ b/src/macosx/native/sun/awt/CPrinterJob.m Tue Feb 19 20:52:39 2013 -0800 @@ -384,31 +384,6 @@ } /* - * Class: sun_lwawt_macosx_EventDispatchAccess - * Method: pumpEventsAndWait - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_sun_lwawt_macosx_EventDispatchAccess_pumpEventsAndWait -(JNIEnv *env, jobject eda) -{ - static JNF_CLASS_CACHE(jc_Thread, "java/lang/Thread"); - static JNF_STATIC_MEMBER_CACHE(jm_currentThread, jc_Thread, "currentThread", "()Ljava/lang/Thread;"); - static JNF_CLASS_CACHE(jc_EventDispatchThread, "java/awt/EventDispatchThread"); - static JNF_MEMBER_CACHE(jm_macosxGetConditional, jc_EventDispatchThread, "_macosxGetConditional", "(Ljava/lang/Object;)Ljava/awt/Conditional;"); - static JNF_MEMBER_CACHE(jm_pumpEvents, jc_EventDispatchThread, "pumpEvents", "(Ljava/awt/Conditional;)V"); - -JNF_COCOA_DURING(env); - - jobject thread = JNFCallStaticObjectMethod(env, jm_currentThread); - jobject conditional = JNFCallObjectMethod(env, thread, jm_macosxGetConditional, eda); - if (conditional != NULL) { - JNFCallVoidMethod(env, thread, jm_pumpEvents, conditional); - } - -JNF_COCOA_HANDLE(env); -} - -/* * Class: sun_lwawt_macosx_CPrinterJob * Method: abortDoc * Signature: ()V
--- a/src/share/classes/java/awt/EventDispatchThread.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/classes/java/awt/EventDispatchThread.java Tue Feb 19 20:52:39 2013 -0800 @@ -107,34 +107,6 @@ } } - // MacOSX change: - // This was added because this class (and java.awt.Conditional) are package private. - // There are certain instances where classes in other packages need to block the - // AWTEventQueue while still allowing it to process events. This uses reflection - // to call back into the caller in order to remove dependencies. - // - // NOTE: This uses reflection in its implementation, so it is not for performance critical code. - // - // cond is an instance of sun.lwawt.macosx.EventDispatchAccess - // - private Conditional _macosxGetConditional(final Object cond) { - try { - return new Conditional() { - final Method evaluateMethod = Class.forName("sun.lwawt.macosx.EventDispatchAccess").getMethod("evaluate", null); - public boolean evaluate() { - try { - return ((Boolean)evaluateMethod.invoke(cond, null)).booleanValue(); - } catch (Exception e) { - return false; - } - } - }; - } catch (Exception e) { - return new Conditional() { public boolean evaluate() { return false; } }; - } - } - - void pumpEvents(Conditional cond) { pumpEvents(ANY_EVENT, cond); }
--- a/src/share/classes/javax/swing/JMenuBar.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/classes/javax/swing/JMenuBar.java Tue Feb 19 20:52:39 2013 -0800 @@ -70,7 +70,14 @@ * of all JavaBeans<sup><font size="-2">TM</font></sup> * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. - * + * <p> + * <strong>Warning:</strong> + * By default, pressing the Tab key does not transfer focus from a <code> + * JMenuBar</code> which is added to a container together with other Swing + * components, because the <code>focusTraversalKeysEnabled</code> property + * of <code>JMenuBar</code> is set to <code>false</code>. To resolve this, + * you should call the <code>JMenuBar.setFocusTraversalKeysEnabled(true)</code> + * method. * @beaninfo * attribute: isContainer true * description: A container for holding and displaying menus.
--- a/src/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java Tue Feb 19 20:52:39 2013 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, 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 @@ -1120,7 +1120,9 @@ listBox.setSelectedIndex( si + 1 ); listBox.ensureIndexIsVisible( si + 1 ); if ( !isTableCellEditor ) { - comboBox.setSelectedIndex(si+1); + if (!(UIManager.getBoolean("ComboBox.noActionOnKeyNavigation") && comboBox.isPopupVisible())) { + comboBox.setSelectedIndex(si+1); + } } comboBox.repaint(); } @@ -1144,7 +1146,9 @@ listBox.setSelectedIndex( si - 1 ); listBox.ensureIndexIsVisible( si - 1 ); if ( !isTableCellEditor ) { - comboBox.setSelectedIndex(si-1); + if (!(UIManager.getBoolean("ComboBox.noActionOnKeyNavigation") && comboBox.isPopupVisible())) { + comboBox.setSelectedIndex(si-1); + } } comboBox.repaint(); } @@ -1490,7 +1494,13 @@ key == HOME || key == END) { int index = getNextIndex(comboBox, key); if (index >= 0 && index < comboBox.getItemCount()) { - comboBox.setSelectedIndex(index); + if (UIManager.getBoolean("ComboBox.noActionOnKeyNavigation") && comboBox.isPopupVisible()) { + ui.listBox.setSelectedIndex(index); + ui.listBox.ensureIndexIsVisible(index); + comboBox.repaint(); + } else { + comboBox.setSelectedIndex(index); + } } } else if (key == DOWN) { @@ -1558,22 +1568,33 @@ else if (key == ENTER) { if (comboBox.isPopupVisible()) { - // Forces the selection of the list item - boolean isEnterSelectablePopup = - UIManager.getBoolean("ComboBox.isEnterSelectablePopup"); - if (!comboBox.isEditable() || isEnterSelectablePopup - || ui.isTableCellEditor) { + // If ComboBox.noActionOnKeyNavigation is set, + // forse selection of list item + if (UIManager.getBoolean("ComboBox.noActionOnKeyNavigation")) { Object listItem = ui.popup.getList().getSelectedValue(); if (listItem != null) { - // Use the selected value from popup - // to set the selected item in combo box, - // but ensure before that JComboBox.actionPerformed() - // won't use editor's value to set the selected item comboBox.getEditor().setItem(listItem); comboBox.setSelectedItem(listItem); } + comboBox.setPopupVisible(false); + } else { + // Forces the selection of the list item + boolean isEnterSelectablePopup = + UIManager.getBoolean("ComboBox.isEnterSelectablePopup"); + if (!comboBox.isEditable() || isEnterSelectablePopup + || ui.isTableCellEditor) { + Object listItem = ui.popup.getList().getSelectedValue(); + if (listItem != null) { + // Use the selected value from popup + // to set the selected item in combo box, + // but ensure before that JComboBox.actionPerformed() + // won't use editor's value to set the selected item + comboBox.getEditor().setItem(listItem); + comboBox.setSelectedItem(listItem); + } + } + comboBox.setPopupVisible(false); } - comboBox.setPopupVisible(false); } else { // Hide combo box if it is a table cell editor @@ -1604,14 +1625,20 @@ } private int getNextIndex(JComboBox comboBox, String key) { + int listHeight = comboBox.getMaximumRowCount(); + + int selectedIndex = comboBox.getSelectedIndex(); + if (UIManager.getBoolean("ComboBox.noActionOnKeyNavigation") + && (comboBox.getUI() instanceof BasicComboBoxUI)) { + selectedIndex = ((BasicComboBoxUI) comboBox.getUI()).listBox.getSelectedIndex(); + } + if (key == PAGE_UP) { - int listHeight = comboBox.getMaximumRowCount(); - int index = comboBox.getSelectedIndex() - listHeight; + int index = selectedIndex - listHeight; return (index < 0 ? 0: index); } else if (key == PAGE_DOWN) { - int listHeight = comboBox.getMaximumRowCount(); - int index = comboBox.getSelectedIndex() + listHeight; + int index = selectedIndex + listHeight; int max = comboBox.getItemCount(); return (index < max ? index: max-1); }
--- a/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/classes/javax/swing/plaf/basic/BasicLookAndFeel.java Tue Feb 19 20:52:39 2013 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2013, 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 @@ -861,6 +861,7 @@ "END", "endPassThrough", "ENTER", "enterPressed" }), + "ComboBox.noActionOnKeyNavigation", Boolean.FALSE, // *** FileChooser
--- a/src/share/classes/sun/awt/im/CompositionAreaHandler.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/classes/sun/awt/im/CompositionAreaHandler.java Tue Feb 19 20:52:39 2013 -0800 @@ -33,6 +33,7 @@ import java.awt.font.TextAttribute; import java.awt.font.TextHitInfo; import java.awt.im.InputMethodRequests; +import java.lang.ref.WeakReference; import java.text.AttributedCharacterIterator; import java.text.AttributedCharacterIterator.Attribute; import java.text.AttributedString; @@ -55,7 +56,7 @@ private AttributedCharacterIterator composedText; private TextHitInfo caret = null; - private Component clientComponent = null; + private WeakReference<Component> clientComponent = new WeakReference<>(null); private InputMethodContext inputMethodContext; /** @@ -76,8 +77,9 @@ } // If the client component is an active client using below-the-spot style, then // make the composition window undecorated without a title bar. - if(clientComponent!=null){ - InputMethodRequests req = clientComponent.getInputMethodRequests(); + Component client = clientComponent.get(); + if(client != null){ + InputMethodRequests req = client.getInputMethodRequests(); if (req != null && inputMethodContext.useBelowTheSpotInput()) { setCompositionAreaUndecorated(true); } @@ -86,7 +88,7 @@ } void setClientComponent(Component clientComponent) { - this.clientComponent = clientComponent; + this.clientComponent = new WeakReference<>(clientComponent); } /** @@ -256,8 +258,9 @@ * the composed text are forwarded to the client component. */ InputMethodRequests getClientInputMethodRequests() { - if (clientComponent != null) { - return clientComponent.getInputMethodRequests(); + Component client = clientComponent.get(); + if (client != null) { + return client.getInputMethodRequests(); } return null;
--- a/src/share/native/sun/awt/image/jpeg/imageioJPEG.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/image/jpeg/imageioJPEG.c Tue Feb 19 20:52:39 2013 -0800 @@ -2694,6 +2694,11 @@ scale[i] = (UINT8*) malloc((maxBandValue + 1) * sizeof(UINT8)); if (scale[i] == NULL) { + // Cleanup before throwing an out of memory exception + for (j = 0; j < i; j++) { + free(scale[j]); + } + free(scale); JNU_ThrowByName( env, "java/lang/OutOfMemoryError", "Writing JPEG Stream"); return JNI_FALSE;
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv.h Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv.h Tue Feb 19 20:52:39 2013 -0800 @@ -31,6 +31,16 @@ extern "C" { #endif /* __cplusplus */ +// Shared macro defined for cleanup of allocated memory. +#ifndef FREE_AND_RETURN_STATUS +#define FREE_AND_RETURN_STATUS \ +{ \ +if (pbuff != buff) mlib_free(pbuff); \ +if (k != akernel) mlib_free(k); \ +return status; \ +} +#endif /* FREE_AND_RETURN_STATUS */ + void mlib_ImageXor80_aa(mlib_u8 *dl, mlib_s32 wid, mlib_s32 hgt,
--- a/src/share/native/sun/awt/medialib/mlib_ImageConvMxN_ext.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConvMxN_ext.c Tue Feb 19 20:52:39 2013 -0800 @@ -253,8 +253,10 @@ if (mn > 256) { dkernel = mlib_malloc(mn * sizeof(mlib_d64)); - if (dkernel == NULL) + if (dkernel == NULL) { + if (dsa != dspace) mlib_free(dsa); return MLIB_FAILURE; + } } while (scale > 30) {
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c Tue Feb 19 20:52:39 2013 -0800 @@ -1884,6 +1884,8 @@ mlib_s32 nchannel, chan1, chan2; mlib_s32 i, j, c, swid; d64_2x32 dd; + mlib_status status = MLIB_SUCCESS; + GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { @@ -1905,7 +1907,10 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); + if (m == 1) { + status = mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); + FREE_AND_RETURN_STATUS; + } swid = wid + (m - 1); @@ -1914,7 +1919,10 @@ if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (FTYPE **)(pbuff + bsize); } @@ -2318,9 +2326,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c Tue Feb 19 20:52:39 2013 -0800 @@ -1651,6 +1651,8 @@ DEF_VARS(DTYPE); mlib_s32 chan2; mlib_s32 *buffo, *buffi; + mlib_status status = MLIB_SUCCESS; + GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { @@ -1672,14 +1674,20 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + if (m == 1) { + status = mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + FREE_AND_RETURN_STATUS; + } bsize = (n + 3)*wid; if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (FTYPE **)(pbuff + bsize); } @@ -2033,9 +2041,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_32nw.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_32nw.c Tue Feb 19 20:52:39 2013 -0800 @@ -1160,6 +1160,8 @@ DEF_VARS_MxN(mlib_s32); mlib_s32 chan2 = chan1 + chan1; + mlib_status status = MLIB_SUCCESS; + if (scale > 30) { fscale *= 1.0/(1 << 30); scale -= 30; @@ -1179,14 +1181,20 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + if (m == 1) { + status = mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + FREE_AND_RETURN_STATUS; + } bsize = (n + 2)*wid; if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(mlib_d64)*bsize + sizeof(mlib_d64*)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (mlib_d64**)(pbuff + bsize); } @@ -1531,9 +1539,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c Tue Feb 19 20:52:39 2013 -0800 @@ -1884,6 +1884,8 @@ mlib_s32 nchannel, chan1, chan2; mlib_s32 i, j, c, swid; d64_2x32 dd; + mlib_status status = MLIB_SUCCESS; + GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { @@ -1905,7 +1907,10 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); + if (m == 1) { + status = mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); + FREE_AND_RETURN_STATUS; + } swid = wid + (m - 1); @@ -1914,7 +1919,10 @@ if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (FTYPE **)(pbuff + bsize); } @@ -2318,9 +2326,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c Tue Feb 19 20:52:39 2013 -0800 @@ -1652,6 +1652,8 @@ DEF_VARS(DTYPE); mlib_s32 chan2; mlib_s32 *buffo, *buffi; + mlib_status status = MLIB_SUCCESS; + GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { @@ -1673,14 +1675,20 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + if (m == 1) { + status = mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + FREE_AND_RETURN_STATUS; + } bsize = (n + 3)*wid; if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (FTYPE **)(pbuff + bsize); } @@ -2034,9 +2042,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c Tue Feb 19 20:52:39 2013 -0800 @@ -1884,6 +1884,8 @@ mlib_s32 nchannel, chan1, chan2; mlib_s32 i, j, c, swid; d64_2x32 dd; + mlib_status status = MLIB_SUCCESS; + GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { @@ -1905,7 +1907,10 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); + if (m == 1) { + status = mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); + FREE_AND_RETURN_STATUS; + } swid = wid + (m - 1); @@ -1914,7 +1919,10 @@ if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (FTYPE **)(pbuff + bsize); } @@ -2318,9 +2326,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c Tue Feb 19 20:52:39 2013 -0800 @@ -1651,6 +1651,8 @@ DEF_VARS(DTYPE); mlib_s32 chan2; mlib_s32 *buffo, *buffi; + mlib_status status = MLIB_SUCCESS; + GET_SRC_DST_PARAMETERS(DTYPE); if (scale > 30) { @@ -1672,14 +1674,20 @@ k[i] = kernel[i]*fscale; } - if (m == 1) return mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + if (m == 1) { + status = mlib_ImageConv1xN(dst, src, k, n, dn, cmask); + FREE_AND_RETURN_STATUS; + } bsize = (n + 3)*wid; if ((bsize > BUFF_SIZE) || (n > MAX_N)) { pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); - if (pbuff == NULL) return MLIB_FAILURE; + if (pbuff == NULL) { + status = MLIB_FAILURE; + FREE_AND_RETURN_STATUS; + } buffs = (FTYPE **)(pbuff + bsize); } @@ -2033,9 +2041,7 @@ } } - if (pbuff != buff) mlib_free(pbuff); - - return MLIB_SUCCESS; + FREE_AND_RETURN_STATUS; } /***************************************************************/
--- a/src/share/native/sun/awt/medialib/mlib_ImageCreate.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_ImageCreate.c Tue Feb 19 20:52:39 2013 -0800 @@ -477,9 +477,9 @@ im_height = mlib_ImageGetHeight(img); im_stride = mlib_ImageGetStride(img); tline = mlib_ImageGetData(img); + if (tline == NULL) return NULL; rtable = mlib_malloc((3 + im_height)*sizeof(mlib_u8 *)); - - if (rtable == NULL || tline == NULL) return NULL; + if (rtable == NULL) return NULL; rtable[0] = 0; rtable[1] = (mlib_u8*)((void **)rtable + 1);
--- a/src/share/native/sun/awt/medialib/mlib_c_ImageConv.h Tue Feb 19 16:49:28 2013 -0800 +++ b/src/share/native/sun/awt/medialib/mlib_c_ImageConv.h Tue Feb 19 20:52:39 2013 -0800 @@ -31,6 +31,16 @@ extern "C" { #endif /* __cplusplus */ +// Shared macro defined for cleanup of allocated memory. +#ifndef FREE_AND_RETURN_STATUS +#define FREE_AND_RETURN_STATUS \ +{ \ +if (pbuff != buff) mlib_free(pbuff); \ +if (k != akernel) mlib_free(k); \ +return status; \ +} +#endif /* FREE_AND_RETURN_STATUS */ + mlib_status mlib_c_conv2x2ext_s16(mlib_image *dst, const mlib_image *src, mlib_s32 dx_l,
--- a/src/solaris/classes/sun/awt/X11/XIconWindow.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/solaris/classes/sun/awt/X11/XIconWindow.java Tue Feb 19 20:52:39 2013 -0800 @@ -92,7 +92,7 @@ } XIconSize[] sizeList = getIconSizes(); - log.finest("Icon sizes: {0}", sizeList); + log.finest("Icon sizes: {0}", (Object[]) sizeList); if (sizeList == null) { // No icon sizes so we simply fall back to 16x16 return new Dimension(16, 16);
--- a/src/solaris/classes/sun/awt/X11InputMethod.java Tue Feb 19 16:49:28 2013 -0800 +++ b/src/solaris/classes/sun/awt/X11InputMethod.java Tue Feb 19 20:52:39 2013 -0800 @@ -57,6 +57,7 @@ import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; +import java.lang.ref.WeakReference; import sun.util.logging.PlatformLogger; import java.util.StringTokenizer; import java.util.regex.Pattern; @@ -104,7 +105,7 @@ //reset the XIC if necessary private boolean needResetXIC = false; - private Component needResetXICClient = null; + private WeakReference<Component> needResetXICClient = new WeakReference<>(null); // The use of compositionEnableSupported is to reduce unnecessary // native calls if set/isCompositionEnabled @@ -272,14 +273,14 @@ called on the passive client when endComposition is called. */ if (needResetXIC && haveActiveClient() && - getClientComponent() != needResetXICClient){ + getClientComponent() != needResetXICClient.get()){ resetXIC(); // needs to reset the last xic focussed component. lastXICFocussedComponent = null; isLastXICActive = false; - needResetXICClient = null; + needResetXICClient.clear(); needResetXIC = false; } } @@ -417,7 +418,7 @@ isLastXICActive = false; resetXIC(); - needResetXICClient = null; + needResetXICClient.clear(); needResetXIC = false; } } @@ -478,7 +479,7 @@ disableInputMethod(); if (needResetXIC) { resetXIC(); - needResetXICClient = null; + needResetXICClient.clear(); needResetXIC = false; } } @@ -877,7 +878,7 @@ boolean active = haveActiveClient(); if (active && composedText == null && committedText == null){ needResetXIC = true; - needResetXICClient = getClientComponent(); + needResetXICClient = new WeakReference<>(getClientComponent()); return; }
--- a/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c Tue Feb 19 16:49:28 2013 -0800 +++ b/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c Tue Feb 19 20:52:39 2013 -0800 @@ -57,22 +57,23 @@ jobject peer, jlong aData) { #ifndef HEADLESS - OGLSDOps *oglsdo = (OGLSDOps *)SurfaceData_InitOps(env, glxsd, - sizeof(OGLSDOps)); GLXSDOps *glxsdo = (GLXSDOps *)malloc(sizeof(GLXSDOps)); - J2dTraceLn(J2D_TRACE_INFO, "GLXSurfaceData_initOps"); - - if (oglsdo == NULL) { - JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed."); - return; - } - if (glxsdo == NULL) { JNU_ThrowOutOfMemoryError(env, "creating native GLX ops"); return; } + OGLSDOps *oglsdo = (OGLSDOps *)SurfaceData_InitOps(env, glxsd, + sizeof(OGLSDOps)); + if (oglsdo == NULL) { + free(glxsdo); + JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed."); + return; + } + + J2dTraceLn(J2D_TRACE_INFO, "GLXSurfaceData_initOps"); + oglsdo->privOps = glxsdo; oglsdo->sdOps.Lock = OGLSD_Lock;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/AbsoluteComponentCenterCalculator.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2013, 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. + */ + +import java.awt.*; + +class AbsoluteComponentCenterCalculator { + private AbsoluteComponentCenterCalculator() { + } + + public static int calculateXCenterCoordinate(Component component) { + return (int) component.getLocationOnScreen().getX() + (component.getWidth() / 2); + } + + public static int calculateYCenterCoordinate(Component component) { + return (int) component.getLocationOnScreen().getY() + (component.getHeight() / 2); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/DataFlavorSearcher.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2013, 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. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.FlavorTable; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; + +public class DataFlavorSearcher { + static public String[] HTML_NAMES = new String[]{"HTML", "HTML Format"}; + static public String[] RICH_TEXT_NAMES = new String[]{"RICH_TEXT", "Rich Text Format"}; + + static public DataFlavor getByteDataFlavorForNative(String[] nats) { + FlavorTable flavorTable = (FlavorTable) SystemFlavorMap.getDefaultFlavorMap(); + + for (String nat : nats) { + java.util.List<DataFlavor> flavors = flavorTable.getFlavorsForNative(nat); + for (DataFlavor flavor : flavors) { + if (flavor != null + && flavor.getRepresentationClass().equals(byte[].class)) { + return flavor; + } + } + } + throw new RuntimeException("No data flavor was found for natives: " + Arrays.toString(nats)); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2013, 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. + */ + +interface InterprocessMessages { + final static int EXECUTION_IS_SUCCESSFULL = 0; + final static int DATA_IS_CORRUPTED = 212; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,27 @@ +<html> +<!-- + + @test + @bug 8005932 + @summary Java 7 on mac os x only provides text clipboard formats + @author mikhail.cherkasov@oracle.com + @library ../../regtesthelpers + @library ../../regtesthelpers/process + @build Util + @build ProcessResults ProcessCommunicator + + + @run applet/othervm MissedHtmlAndRtfBug.html +*/> +<head> + <title>Java 7 on mac os x only provides text clipboard formats</title> +</head> +<body> + +<h1> MissedHtmlAndRtfBug <br>Bug ID: 8005932 </h1> + +<p> This is an AUTOMATIC test, simply wait for completion </p> + +<APPLET CODE="MissedHtmlAndRtfBug.class" WIDTH=200 HEIGHT=200></APPLET> +</body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2013, 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 8005932 + @summary Java 7 on mac os x only provides text clipboard formats + @author mikhail.cherkasov@oracle.com + @library ../../regtesthelpers + @library ../../regtesthelpers/process + @build Util + @build ProcessResults ProcessCommunicator + + + @run applet/othervm MissedHtmlAndRtfBug.html +*/ +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.event.*; +import java.applet.Applet; +import java.io.File; +import java.util.ArrayList; + +import test.java.awt.regtesthelpers.process.ProcessCommunicator; +import test.java.awt.regtesthelpers.process.ProcessResults; +import test.java.awt.regtesthelpers.Util; +import sun.awt.OSInfo; + +import static java.lang.Thread.sleep; + +public class MissedHtmlAndRtfBug extends Applet { + public void init() { + setLayout(new BorderLayout()); + }//End init() + + public void start() { + if (OSInfo.getOSType() != OSInfo.OSType.MACOSX + && OSInfo.getOSType() != OSInfo.OSType.WINDOWS) { + System.out.println("This test is for Windows and Mac only. Passed."); + return; + } + + final Frame sourceFrame = new Frame("Source frame"); + final SourcePanel sourcePanel = new SourcePanel(); + sourceFrame.add(sourcePanel); + sourceFrame.pack(); + sourceFrame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + sourceFrame.dispose(); + } + }); + sourceFrame.setVisible(true); + + Util.waitForIdle(null); + + NextFramePositionCalculator positionCalculator = new NextFramePositionCalculator(sourceFrame); + + ArrayList<String> args = new ArrayList<String>(5); + args.add(String.valueOf(positionCalculator.getNextLocationX())); + args.add(String.valueOf(positionCalculator.getNextLocationY())); + args.add(String.valueOf(AbsoluteComponentCenterCalculator.calculateXCenterCoordinate(sourcePanel))); + args.add(String.valueOf(AbsoluteComponentCenterCalculator.calculateYCenterCoordinate(sourcePanel))); + args.add(concatStrings(DataFlavorSearcher.RICH_TEXT_NAMES)); + + ProcessResults processResults = +// ProcessCommunicator.executeChildProcess(this.getClass(), "/Users/mcherkasov/ws/clipboard/DataFlover/out/production/DataFlover" + +// " -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ", +// args.toArray(new String[0])); + ProcessCommunicator.executeChildProcess(this.getClass(), + "." + File.separator + System.getProperty("java.class.path"), args.toArray(new String[]{})); + + verifyTestResults(processResults); + + args.set(args.size() - 1, concatStrings(DataFlavorSearcher.HTML_NAMES)); + + ProcessCommunicator.executeChildProcess(this.getClass(), + "." + File.separator + System.getProperty("java.class.path"), args.toArray(new String[]{})); + verifyTestResults(processResults); + + + }// start() + + private String concatStrings(String[] strings) { + StringBuffer result = new StringBuffer("\""); + for (int i = 0; i < strings.length; i++) { + result.append(strings[i]); + result.append(","); + } + result.append("\""); + return result.toString(); + } + + + private static void verifyTestResults(ProcessResults processResults) { + if (InterprocessMessages.DATA_IS_CORRUPTED == + processResults.getExitValue()) { + processResults.printProcessErrorOutput(System.err); + throw new RuntimeException("TEST IS FAILED: Target has received" + + " corrupted data."); + } + processResults.verifyStdErr(System.err); + processResults.verifyProcessExitValue(System.err); + processResults.printProcessStandartOutput(System.out); + } + + //We cannot make an instance of the applet without the default constructor + public MissedHtmlAndRtfBug() { + super(); + } + + //We need in this constructor to pass frame position between JVMs + public MissedHtmlAndRtfBug(Point targetFrameLocation, Point dragSourcePoint, DataFlavor df) + throws InterruptedException { + final Frame targetFrame = new Frame("Target frame"); + final TargetPanel targetPanel = new TargetPanel(targetFrame, df); + targetFrame.add(targetPanel); + targetFrame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + targetFrame.dispose(); + } + }); + targetFrame.setLocation(targetFrameLocation); + targetFrame.pack(); + targetFrame.setVisible(true); + + doTest(dragSourcePoint, targetPanel); + } + + private void doTest(Point dragSourcePoint, TargetPanel targetPanel) { + Util.waitForIdle(null); + + final Robot robot = Util.createRobot(); + + robot.mouseMove((int) dragSourcePoint.getX(), (int) dragSourcePoint.getY()); + try { + sleep(100); + robot.mousePress(InputEvent.BUTTON1_MASK); + sleep(100); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + Util.drag(robot, dragSourcePoint, new Point(AbsoluteComponentCenterCalculator.calculateXCenterCoordinate(targetPanel), + AbsoluteComponentCenterCalculator.calculateYCenterCoordinate(targetPanel)), + InputEvent.BUTTON1_MASK); + } + + + enum InterprocessArguments { + TARGET_FRAME_X_POSITION_ARGUMENT, + TARGET_FRAME_Y_POSITION_ARGUMENT, + DRAG_SOURCE_POINT_X_ARGUMENT, + DRAG_SOURCE_POINT_Y_ARGUMENT, + DATA_FLAVOR_NAMES; + + int extractInt(String[] args) { + return Integer.parseInt(args[this.ordinal()]); + } + + String[] extractStringArray(String[] args) { + return args[this.ordinal()].replaceAll("\"", "").split(","); + } + } + + public static void main(String[] args) { + Point dragSourcePoint = new Point(InterprocessArguments.DRAG_SOURCE_POINT_X_ARGUMENT.extractInt(args), + InterprocessArguments.DRAG_SOURCE_POINT_Y_ARGUMENT.extractInt(args)); + Point targetFrameLocation = new Point(InterprocessArguments.TARGET_FRAME_X_POSITION_ARGUMENT.extractInt(args), + InterprocessArguments.TARGET_FRAME_Y_POSITION_ARGUMENT.extractInt(args)); + String[] names = InterprocessArguments.DATA_FLAVOR_NAMES.extractStringArray(args); + + DataFlavor df = DataFlavorSearcher.getByteDataFlavorForNative(names); + try { + new MissedHtmlAndRtfBug(targetFrameLocation, dragSourcePoint, df); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MyTransferable.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2013, 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. + */ + +import java.awt.datatransfer.*; +import java.io.IOException; + +class MyTransferable implements Transferable { + + public static final String TEST_DATA = "<b>Test</b>"; + private DataFlavor[] dataFlavors; + + public MyTransferable() { + dataFlavors = new DataFlavor[]{DataFlavorSearcher.getByteDataFlavorForNative(DataFlavorSearcher.HTML_NAMES), + DataFlavorSearcher.getByteDataFlavorForNative(DataFlavorSearcher.RICH_TEXT_NAMES)}; + } + + + @Override + public DataFlavor[] getTransferDataFlavors() { + return dataFlavors; + } + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + for (DataFlavor f : dataFlavors) { + if (f.equals(flavor)) { + return true; + } + } + return false; + } + + @Override + public Object getTransferData(DataFlavor flavor) + throws UnsupportedFlavorException, IOException { + if (isDataFlavorSupported(flavor)) { + return TEST_DATA.getBytes("UTF-16"); + } else { + throw new UnsupportedFlavorException(flavor); + } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/NextFramePositionCalculator.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,20 @@ +import java.awt.*; + + +class NextFramePositionCalculator { + + private final Frame currentFrame; + + public NextFramePositionCalculator(Frame currentFrame) { + this.currentFrame = currentFrame; + } + + public int getNextLocationX() { + return currentFrame.getX() + currentFrame.getWidth(); + } + + public int getNextLocationY() { + return currentFrame.getY(); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/SourcePanel.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,26 @@ +import java.awt.dnd.DragSource; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.*; + +public class SourcePanel extends Panel { + + private final MyDragGestureListener dragGestureListener = + new MyDragGestureListener(); + + public SourcePanel() { + setPreferredSize(new Dimension(200, 200)); + DragSource defaultDragSource = + DragSource.getDefaultDragSource(); + defaultDragSource.createDefaultDragGestureRecognizer(this, + DnDConstants.ACTION_COPY_OR_MOVE, dragGestureListener); + setBackground(Color.RED); + } + + private class MyDragGestureListener implements DragGestureListener { + public void dragGestureRecognized(DragGestureEvent dge) { + dge.startDrag(null, new MyTransferable()); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/TargetPanel.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,83 @@ +import java.awt.datatransfer.Transferable; +import java.awt.dnd.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; +import java.util.Timer; +import java.util.TimerTask; + +public class TargetPanel extends Panel implements DropTargetListener { + + + //private final CustomDropTargetListener dropTargetListener = new CustomDropTargetListener(); + + private Frame frame; + DataFlavor dataFlavor; + + public TargetPanel(Frame frame, DataFlavor dataFlavor) { + this.dataFlavor = dataFlavor; + this.frame = frame; + setBackground(Color.DARK_GRAY); + setPreferredSize(new Dimension(200, 200)); + setDropTarget(new DropTarget(this, this)); + } + + public void dragEnter(DropTargetDragEvent dtde) { + if (dtde.isDataFlavorSupported(dataFlavor)) { + dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); + } + } + + public void dragOver(DropTargetDragEvent dtde) { + if (dtde.isDataFlavorSupported(dataFlavor)) { + dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); + } + } + + public void dropActionChanged(DropTargetDragEvent dtde) { + if (dtde.isDataFlavorSupported(dataFlavor)) { + dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); + } + } + + public void dragExit(DropTargetEvent dte) { + + } + + public void drop(DropTargetDropEvent dtde) { + dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); + if (dtde.isDataFlavorSupported(dataFlavor)) { + String result = null; + try { + Transferable t = dtde.getTransferable(); + byte[] data = (byte[]) dtde.getTransferable().getTransferData(dataFlavor); + result = new String(data, "UTF-16"); + repaint(); + } catch (UnsupportedFlavorException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + dtde.dropComplete(true); + + + if (result != null && result.contains(MyTransferable.TEST_DATA)) { + System.err.println(InterprocessMessages.EXECUTION_IS_SUCCESSFULL); + Timer t = new Timer(); + t.schedule(new TimerTask() { + @Override + public void run() { + System.exit(0); + } + }, 2000); + return; + + } + } + dtde.rejectDrop(); + System.err.println(InterprocessMessages.DATA_IS_CORRUPTED); + System.exit(InterprocessMessages.DATA_IS_CORRUPTED); + } + +}
--- a/test/java/awt/Frame/WindowDragTest/WindowDragTest.java Tue Feb 19 16:49:28 2013 -0800 +++ b/test/java/awt/Frame/WindowDragTest/WindowDragTest.java Tue Feb 19 20:52:39 2013 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2013, 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 @@ -23,10 +23,11 @@ /* @test - @bug 7128738 + @bug 7128738 7161759 @summary dragged dialog freezes system on dispose @author Oleg Pekhovskiy: area=awt.toplevel @library ../../regtesthelpers + @build Util @run main WindowDragTest */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/im/memoryleak/InputContextMemoryLeakTest.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2013, 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. + */ + +import java.awt.FlowLayout; +import java.awt.Robot; +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; +import test.java.awt.regtesthelpers.Util; + +/* + @test + @bug 7079260 + @summary XInputContext leaks memory by needRecetXXIClient field + @author Petr Pchelko + @library ../../regtesthelpers + @build Util + @compile InputContextMemoryLeakTest.java + @run main/othervm -Xmx20M InputContextMemoryLeakTest + */ +public class InputContextMemoryLeakTest { + + private static JFrame frame; + private static WeakReference<JTextField> text; + private static WeakReference<JPanel> p; + private static JButton button; + + public static void init() throws Throwable { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new JFrame(); + frame.setLayout(new FlowLayout()); + JPanel p1 = new JPanel(); + button = new JButton("Test"); + p1.add(button); + frame.add(p1); + text = new WeakReference<JTextField>(new JTextField("Text")); + p = new WeakReference<JPanel>(new JPanel(new FlowLayout())); + p.get().add(text.get()); + frame.add(p.get()); + frame.setBounds(500, 400, 200, 200); + frame.setVisible(true); + } + }); + + Util.focusComponent(text.get(), 500); + Util.clickOnComp(button, new Robot()); + //References to objects testes for memory leak are stored in Util. + //Need to clean them + Util.cleanUp(); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame.remove(p.get()); + } + }); + + Util.waitForIdle(null); + //After the next caret blink it automatically TextField references + Thread.sleep(text.get().getCaret().getBlinkRate() * 2); + Util.waitForIdle(null); + assertGC(); + } + + public static void assertGC() throws Throwable { + List<byte[]> alloc = new ArrayList<byte[]>(); + int size = 1024 * 10; + while (true) { + try { + alloc.add(new byte[size]); + } catch (OutOfMemoryError err) { + break; + } + } + alloc = null; + if (text.get() != null) { + throw new Exception("Test failed: JTextField was not collected"); + } + } + + public static void main(String args[]) throws Throwable { + init(); + } +}
--- a/test/java/awt/regtesthelpers/Util.java Tue Feb 19 16:49:28 2013 -0800 +++ b/test/java/awt/regtesthelpers/Util.java Tue Feb 19 20:52:39 2013 -0800 @@ -463,6 +463,13 @@ return -1; } + //Cleans all the references + public static void cleanUp() { + apListener = null; + fgListener = null; + wgfListener = null; + } + //////////////////////////// // Some stuff to test focus.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/javax/swing/JComboBox/4199622/bug4199622.java Tue Feb 19 20:52:39 2013 -0800 @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2013, 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 4199622 + @summary RFE: JComboBox shouldn't send ActionEvents for keyboard navigation + @author Vladislav Karnaukhov + @run main bug4199622 +*/ + +import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; +import sun.awt.OSInfo; +import sun.awt.SunToolkit; + +import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.lang.reflect.InvocationTargetException; + +public class bug4199622 extends JFrame implements ActionListener { + + static final int nElems = 20; + static JComboBox<String> cb = null; + + bug4199622(LookAndFeel laf) { + super(); + + try { + UIManager.setLookAndFeel(laf); + } catch (UnsupportedLookAndFeelException e) { + throw new RuntimeException("Test failed", e); + } + + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + cb = new JComboBox<>(); + for (int i = 0; i < nElems; i++) { + cb.addItem(String.valueOf(i + 1)); + } + cb.addActionListener(this); + add(cb); + + setSize(300, 300); + pack(); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (UIManager.getBoolean("ComboBox.noActionOnKeyNavigation") && cb.isPopupVisible()) { + throw new RuntimeException("Test failed. actionPerformed generated"); + } + } + + static Robot robot = null; + static SunToolkit toolkit = null; + + static void doTest() { + if (robot == null) { + try { + robot = new Robot(); + robot.setAutoDelay(20); + } catch (AWTException e) { + throw new RuntimeException("Can't create robot. Test failed", e); + } + } + + toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + if (toolkit == null) { + throw new RuntimeException("Can't get the toolkit. Test failed"); + } + toolkit.realSync(); + + doActualTest(); + + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + cb.hidePopup(); + cb.setEditable(true); + cb.updateUI(); + } + }); + } catch (InterruptedException e) { + throw new RuntimeException("Test failed", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Test failed", e); + } + + toolkit.realSync(); + doActualTest(); + } + + static void doActualTest() { + UIManager.put("ComboBox.noActionOnKeyNavigation", true); + doTestUpDown(); + UIManager.put("ComboBox.noActionOnKeyNavigation", false); + doTestUpDown(); + + UIManager.put("ComboBox.noActionOnKeyNavigation", true); + doTestPgUpDown(); + UIManager.put("ComboBox.noActionOnKeyNavigation", false); + doTestPgUpDown(); + + UIManager.put("ComboBox.noActionOnKeyNavigation", true); + doTestHomeEnd(); + UIManager.put("ComboBox.noActionOnKeyNavigation", false); + doTestHomeEnd(); + } + + static void doTestHomeEnd() { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + cb.hidePopup(); + cb.setSelectedIndex(0); + } + }); + } catch (InterruptedException e) { + throw new RuntimeException("Test failed", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Test failed", e); + } + toolkit.realSync(); + + robot.keyPress(KeyEvent.VK_END); + toolkit.realSync(); + robot.keyPress(KeyEvent.VK_HOME); + toolkit.realSync(); + } + + static void doTestUpDown() { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + cb.hidePopup(); + cb.setSelectedIndex(0); + } + }); + } catch (InterruptedException e) { + throw new RuntimeException("Test failed", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Test failed", e); + } + toolkit.realSync(); + + for (int i = 0; i < nElems; i++) { + robot.keyPress(KeyEvent.VK_DOWN); + toolkit.realSync(); + } + + for (int i = 0; i < nElems; i++) { + robot.keyPress(KeyEvent.VK_UP); + toolkit.realSync(); + } + } + + static void doTestPgUpDown() { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + cb.hidePopup(); + cb.setSelectedIndex(0); + } + }); + } catch (InterruptedException e) { + throw new RuntimeException("Test failed", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Test failed", e); + } + toolkit.realSync(); + + int listHeight = cb.getMaximumRowCount(); + for (int i = 0; i < nElems; i += listHeight) { + robot.keyPress(KeyEvent.VK_PAGE_DOWN); + toolkit.realSync(); + } + + for (int i = 0; i < nElems; i += listHeight) { + robot.keyPress(KeyEvent.VK_PAGE_UP); + toolkit.realSync(); + } + } + + public static void main(String[] args) { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + bug4199622 test = new bug4199622(new MetalLookAndFeel()); + test.setVisible(true); + } + }); + } catch (InterruptedException e) { + throw new RuntimeException("Test failed", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Test failed", e); + } + doTest(); + + if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + bug4199622 test = new bug4199622(new WindowsLookAndFeel()); + test.setVisible(true); + } + }); + } catch (InterruptedException e) { + throw new RuntimeException("Test failed", e); + } catch (InvocationTargetException e) { + throw new RuntimeException("Test failed", e); + } + doTest(); + } + } +}
--- a/test/javax/swing/JLabel/6596966/bug6596966.java Tue Feb 19 16:49:28 2013 -0800 +++ b/test/javax/swing/JLabel/6596966/bug6596966.java Tue Feb 19 20:52:39 2013 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2013, 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 @@ -24,16 +24,17 @@ /* @test @bug 6596966 @summary Some JFileChooser mnemonics do not work with sticky keys + @library ../../regtesthelpers + @build Util @run main bug6596966 @author Pavel Porvatov */ - -import sun.awt.SunToolkit; - -import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; +import java.util.ArrayList; +import javax.swing.*; +import sun.awt.SunToolkit; public class bug6596966 { private static JFrame frame; @@ -71,11 +72,14 @@ toolkit.realSync(); - robot.keyPress(KeyEvent.VK_ALT); + ArrayList<Integer> keys = Util.getSystemMnemonicKeyCodes(); + for (int i = 0; i < keys.size(); ++i) { + robot.keyPress(keys.get(i)); + } + robot.keyPress(KeyEvent.VK_L); toolkit.realSync(); - toolkit.getSystemEventQueue().postEvent(new KeyEvent(label, KeyEvent.KEY_RELEASED, EventQueue.getMostRecentEventTime(), 0, KeyEvent.VK_L, 'L')); @@ -90,7 +94,11 @@ } }); } finally { - robot.keyRelease(KeyEvent.VK_ALT); + robot.keyRelease(KeyEvent.VK_L); + for (int i = 0; i < keys.size(); ++i) { + robot.keyRelease(keys.get(i)); + } + toolkit.realSync(); } } }
--- a/test/javax/swing/regtesthelpers/Util.java Tue Feb 19 16:49:28 2013 -0800 +++ b/test/javax/swing/regtesthelpers/Util.java Tue Feb 19 20:52:39 2013 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2013, 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 @@ -23,11 +23,13 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.*; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.concurrent.Callable; +import sun.swing.*; /** * <p>This class contains utilities useful for regression testing. @@ -212,4 +214,33 @@ return result.get(0); } + /** + * Gets key codes from system mnemonic key mask + * @return key codes list + */ + public static ArrayList<Integer> getSystemMnemonicKeyCodes() { + return Util.getKeyCodesFromKeyMask(SwingUtilities2.getSystemMnemonicKeyMask()); + } + + /** + * Gets the key codes list from modifiers + * @param modifiers an integer combination of the modifier constants + * @return key codes list + */ + public static ArrayList<Integer> getKeyCodesFromKeyMask(int modifiers) { + ArrayList<Integer> result = new ArrayList<>(); + if ((modifiers & InputEvent.CTRL_MASK) != 0) { + result.add(KeyEvent.VK_CONTROL); + } + if ((modifiers & InputEvent.ALT_MASK) != 0) { + result.add(KeyEvent.VK_ALT); + } + if ((modifiers & InputEvent.SHIFT_MASK) != 0) { + result.add(KeyEvent.VK_SHIFT); + } + if ((modifiers & InputEvent.META_MASK) != 0) { + result.add(KeyEvent.VK_META); + } + return result; + } }