# HG changeset patch # User lana # Date 1368810380 25200 # Node ID 19e9480ad872732d308e753133bb55acd8c8e68e # Parent 9bc2ffbb42d1b485a8831549c1c23f5144b099d0# Parent 8020a243070425e7e12132cff9c739cb48b1d17f Merge diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/make/sun/awt/mapfile-vers --- a/jdk/make/sun/awt/mapfile-vers Fri May 17 10:04:12 2013 -0700 +++ b/jdk/make/sun/awt/mapfile-vers Fri May 17 10:06:20 2013 -0700 @@ -87,6 +87,7 @@ Java_sun_java2d_pipe_ShapeSpanIterator_skipDownTo; Java_java_awt_Dimension_initIDs; + Java_java_awt_Choice_initIDs; Java_java_awt_event_MouseEvent_initIDs; Java_java_awt_image_DataBufferInt_initIDs; Java_java_awt_image_SinglePixelPackedSampleModel_initIDs; diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/make/sun/awt/mapfile-vers-bsd --- a/jdk/make/sun/awt/mapfile-vers-bsd Fri May 17 10:04:12 2013 -0700 +++ b/jdk/make/sun/awt/mapfile-vers-bsd Fri May 17 10:06:20 2013 -0700 @@ -87,6 +87,7 @@ Java_sun_java2d_pipe_ShapeSpanIterator_skipDownTo; Java_java_awt_Dimension_initIDs; + Java_java_awt_Choice_initIDs; Java_java_awt_event_MouseEvent_initIDs; Java_java_awt_image_DataBufferInt_initIDs; Java_java_awt_image_SinglePixelPackedSampleModel_initIDs; diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/make/sun/awt/mapfile-vers-linux --- a/jdk/make/sun/awt/mapfile-vers-linux Fri May 17 10:04:12 2013 -0700 +++ b/jdk/make/sun/awt/mapfile-vers-linux Fri May 17 10:06:20 2013 -0700 @@ -87,6 +87,7 @@ Java_sun_java2d_pipe_ShapeSpanIterator_skipDownTo; Java_java_awt_Dimension_initIDs; + Java_java_awt_Choice_initIDs; Java_java_awt_event_MouseEvent_initIDs; Java_java_awt_image_DataBufferInt_initIDs; Java_java_awt_image_SinglePixelPackedSampleModel_initIDs; diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/makefiles/mapfiles/libawt/mapfile-vers --- a/jdk/makefiles/mapfiles/libawt/mapfile-vers Fri May 17 10:04:12 2013 -0700 +++ b/jdk/makefiles/mapfiles/libawt/mapfile-vers Fri May 17 10:06:20 2013 -0700 @@ -86,6 +86,7 @@ Java_sun_java2d_pipe_ShapeSpanIterator_setRule; Java_sun_java2d_pipe_ShapeSpanIterator_skipDownTo; + Java_java_awt_Choice_initIDs; Java_java_awt_Dimension_initIDs; Java_java_awt_event_MouseEvent_initIDs; Java_java_awt_image_DataBufferInt_initIDs; diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/makefiles/mapfiles/libawt/mapfile-vers-linux --- a/jdk/makefiles/mapfiles/libawt/mapfile-vers-linux Fri May 17 10:04:12 2013 -0700 +++ b/jdk/makefiles/mapfiles/libawt/mapfile-vers-linux Fri May 17 10:06:20 2013 -0700 @@ -86,6 +86,7 @@ Java_sun_java2d_pipe_ShapeSpanIterator_setRule; Java_sun_java2d_pipe_ShapeSpanIterator_skipDownTo; + Java_java_awt_Choice_initIDs; Java_java_awt_Dimension_initIDs; Java_java_awt_event_MouseEvent_initIDs; Java_java_awt_image_DataBufferInt_initIDs; diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Fri May 17 10:06:20 2013 -0700 @@ -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 @@ -56,6 +56,8 @@ void initializeImpl() { super.initializeImpl(); final Scrollbar target = getTarget(); + setLineIncrement(target.getUnitIncrement()); + setPageIncrement(target.getBlockIncrement()); setValues(target.getValue(), target.getVisibleAmount(), target.getMinimum(), target.getMaximum()); diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/macosx/classes/sun/lwawt/LWToolkit.java --- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Fri May 17 10:06:20 2013 -0700 @@ -53,7 +53,12 @@ private Clipboard clipboard; private MouseInfoPeer mouseInfoPeer; - public LWToolkit() { + /** + * Dynamic Layout Resize client code setting. + */ + private volatile boolean dynamicLayoutSetting = true; + + protected LWToolkit() { } /* @@ -561,4 +566,37 @@ ((LWWindowPeer)w.getPeer()).ungrab(false); } } + + @Override + protected final Object lazilyLoadDesktopProperty(final String name) { + if (name.equals("awt.dynamicLayoutSupported")) { + return isDynamicLayoutSupported(); + } + return super.lazilyLoadDesktopProperty(name); + } + + @Override + public final void setDynamicLayout(final boolean dynamic) { + dynamicLayoutSetting = dynamic; + } + + @Override + protected final boolean isDynamicLayoutSet() { + return dynamicLayoutSetting; + } + + @Override + public final boolean isDynamicLayoutActive() { + // "Live resizing" is active by default and user's data is ignored. + return isDynamicLayoutSupported(); + } + + /** + * Returns true if dynamic layout of Containers on resize is supported by + * the underlying operating system and/or window manager. + */ + protected final boolean isDynamicLayoutSupported() { + // "Live resizing" is supported by default. + return true; + } } diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/macosx/native/sun/awt/AWTSurfaceLayers.m --- a/jdk/src/macosx/native/sun/awt/AWTSurfaceLayers.m Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/macosx/native/sun/awt/AWTSurfaceLayers.m Fri May 17 10:06:20 2013 -0700 @@ -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 @@ -28,6 +28,7 @@ #import "LWCToolkit.h" #import +#import @implementation AWTSurfaceLayers @@ -74,14 +75,12 @@ } - (void) setBounds:(CGRect)rect { - layer.anchorPoint = CGPointMake(0, 0); - // translates values to the coordinate system of the "root" layer - CGFloat newY = windowLayer.bounds.size.height - rect.origin.y - rect.size.height; - CGRect newRect = CGRectMake(rect.origin.x, newY, rect.size.width, rect.size.height); - - layer.frame = newRect; - + rect.origin.y = windowLayer.bounds.size.height - rect.origin.y - rect.size.height; + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + layer.frame = rect; + [CATransaction commit]; [AWTSurfaceLayers repaintLayersRecursively:layer]; } diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/macosx/native/sun/java2d/opengl/CGLLayer.m --- a/jdk/src/macosx/native/sun/java2d/opengl/CGLLayer.m Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/macosx/native/sun/java2d/opengl/CGLLayer.m Fri May 17 10:06:20 2013 -0700 @@ -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 @@ -64,11 +64,13 @@ //Disable CALayer's default animation NSMutableDictionary * actions = [[NSMutableDictionary alloc] initWithObjectsAndKeys: + [NSNull null], @"anchorPoint", [NSNull null], @"bounds", [NSNull null], @"contents", [NSNull null], @"contentsScale", [NSNull null], @"onOrderIn", [NSNull null], @"onOrderOut", + [NSNull null], @"position", [NSNull null], @"sublayers", nil]; self.actions = actions; diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/share/classes/java/awt/Component.java --- a/jdk/src/share/classes/java/awt/Component.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/share/classes/java/awt/Component.java Fri May 17 10:06:20 2013 -0700 @@ -1671,6 +1671,15 @@ /* do nothing */ } + /* + * Delete references from LightweithDispatcher of a heavyweight parent + */ + void clearLightweightDispatcherOnRemove(Component removedComponent) { + if (parent != null) { + parent.clearLightweightDispatcherOnRemove(removedComponent); + } + } + /** * @deprecated As of JDK version 1.1, * replaced by setVisible(boolean). @@ -6974,6 +6983,8 @@ } synchronized (getTreeLock()) { + clearLightweightDispatcherOnRemove(this); + if (isFocusOwner() && KeyboardFocusManager.isAutoFocusTransferEnabledFor(this)) { transferFocus(true); } diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/share/classes/java/awt/Container.java --- a/jdk/src/share/classes/java/awt/Container.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/share/classes/java/awt/Container.java Fri May 17 10:06:20 2013 -0700 @@ -3306,6 +3306,16 @@ } } + @Override + void clearLightweightDispatcherOnRemove(Component removedComponent) { + if (dispatcher != null) { + dispatcher.removeReferences(removedComponent); + } else { + //It is a Lightweight Container, should clear parent`s Dispatcher + super.clearLightweightDispatcherOnRemove(removedComponent); + } + } + final Container getTraversalRoot() { if (isFocusCycleRoot()) { return findTraversalRoot(); @@ -4411,6 +4421,7 @@ //System.out.println("Disposing lw dispatcher"); stopListeningForOtherDrags(); mouseEventTarget = null; + targetLastEntered = null; } /** @@ -4502,6 +4513,7 @@ // MOUSE_CLICKED. if (!isMouseGrab(e) && id != MouseEvent.MOUSE_CLICKED) { mouseEventTarget = (mouseOver != nativeContainer) ? mouseOver: null; + isCleaned = false; } if (mouseEventTarget != null) { @@ -4545,10 +4557,14 @@ retargetMouseEvent(mouseOver, id, e); break; } - //Consuming of wheel events is implemented in "retargetMouseEvent". - if (id != MouseEvent.MOUSE_WHEEL) { - e.consume(); - } + //Consuming of wheel events is implemented in "retargetMouseEvent". + if (id != MouseEvent.MOUSE_WHEEL) { + e.consume(); + } + } else if (isCleaned && id != MouseEvent.MOUSE_WHEEL) { + //After mouseEventTarget was removed and cleaned should consume all events + //until new mouseEventTarget is found + e.consume(); } return e.isConsumed(); } @@ -4892,6 +4908,11 @@ private transient Component targetLastEntered; /** + * Indicates whether {@code mouseEventTarget} was removed and nulled + */ + private transient boolean isCleaned; + + /** * Is the mouse over the native container */ private transient boolean isMouseInNativeContainer = false; @@ -4925,4 +4946,14 @@ AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_WHEEL_EVENT_MASK; + + void removeReferences(Component removedComponent) { + if (mouseEventTarget == removedComponent) { + isCleaned = true; + mouseEventTarget = null; + } + if (targetLastEntered == removedComponent) { + targetLastEntered = null; + } + } } diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/src/share/classes/sun/swing/JLightweightFrame.java --- a/jdk/src/share/classes/sun/swing/JLightweightFrame.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/src/share/classes/sun/swing/JLightweightFrame.java Fri May 17 10:06:20 2013 -0700 @@ -35,6 +35,7 @@ import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; +import java.security.AccessController; import javax.swing.JLayeredPane; import javax.swing.JPanel; @@ -43,6 +44,7 @@ import javax.swing.RootPaneContainer; import sun.awt.LightweightFrame; +import sun.security.action.GetPropertyAction; /** * The frame serves as a lightweight container which paints its content @@ -66,11 +68,27 @@ private BufferedImage bbImage; /** + * {@code copyBufferEnabled}, true by default, defines the following strategy. + * A duplicating (copy) buffer is created for the original pixel buffer. + * The copy buffer is synchronized with the original buffer every time the + * latter changes. {@code JLightweightFrame} passes the copy buffer array + * to the {@link LightweightContent#imageBufferReset} method. The code spot + * which synchronizes two buffers becomes the only critical section guarded + * by the lock (managed with the {@link LightweightContent#paintLock()}, + * {@link LightweightContent#paintUnlock()} methods). + */ + private boolean copyBufferEnabled; + private int[] copyBuffer; + + /** * Constructs a new, initially invisible {@code JLightweightFrame} * instance. */ public JLightweightFrame() { super(); + copyBufferEnabled = "true".equals(AccessController. + doPrivileged(new GetPropertyAction("jlf.copyBufferEnabled", "true"))); + add(rootPane, BorderLayout.CENTER); setFocusTraversalPolicy(new LayoutFocusTraversalPolicy()); if (getGraphicsConfiguration().isTranslucencyCapable()) { @@ -124,16 +142,37 @@ if (content != null) content.focusUngrabbed(); } + private void syncCopyBuffer(boolean reset, int x, int y, int w, int h) { + content.paintLock(); + try { + int[] srcBuffer = ((DataBufferInt)bbImage.getRaster().getDataBuffer()).getData(); + if (reset) { + copyBuffer = new int[srcBuffer.length]; + } + int linestride = bbImage.getWidth(); + + for (int i=0; i button; + private static WeakReference p; + + public static void init() throws Throwable { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new JFrame(); + frame.setLayout(new FlowLayout()); + button = new WeakReference(new JButton("Text")); + p = new WeakReference(new JPanel(new FlowLayout())); + p.get().add(button.get()); + frame.add(p.get()); + + frame.setBounds(500, 400, 200, 200); + frame.setVisible(true); + } + }); + + Util.waitTillShown(button.get()); + Util.clickOnComp(button.get(), new Robot()); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame.remove(p.get()); + } + }); + + Util.waitForIdle(null); + assertGC(); + } + + public static void assertGC() throws Throwable { + List alloc = new ArrayList(); + int size = 10 * 1024; + while (true) { + try { + alloc.add(new byte[size]); + } catch (OutOfMemoryError err) { + break; + } + } + alloc = null; + if (button.get() != null) { + throw new Exception("Test failed: JButton was not collected"); + } + } + + public static void main(String args[]) throws Throwable { + init(); + } +} diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/test/java/awt/TrayIcon/DragEventSource/DragEventSource.java --- a/jdk/test/java/awt/TrayIcon/DragEventSource/DragEventSource.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/test/java/awt/TrayIcon/DragEventSource/DragEventSource.java Fri May 17 10:06:20 2013 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -64,6 +64,21 @@ } private static void init() { + + boolean isSupported = SystemTray.isSupported(); + System.out.println("is SysTray Supported: " + isSupported); + + if (!isSupported) { + String[] instructions = + { + "The test cannot be run because SystemTray is not supported.", + "Simply press PASS button." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + return; + } + String[] instructions = { "Use see a Frame with a button in it.", @@ -79,8 +94,8 @@ frame.setLayout(new FlowLayout()); tray = SystemTray.getSystemTray(); - boolean isSupported = tray.isSupported(); - System.out.println("is SysTray Supported: " + isSupported); + + TrayIcon icons[] = tray.getTrayIcons(); System.out.println(icons.length); diff -r 9bc2ffbb42d1 -r 19e9480ad872 jdk/test/java/awt/datatransfer/HTMLDataFlavors/HTMLDataFlavorTest.java --- a/jdk/test/java/awt/datatransfer/HTMLDataFlavors/HTMLDataFlavorTest.java Fri May 17 10:04:12 2013 -0700 +++ b/jdk/test/java/awt/datatransfer/HTMLDataFlavors/HTMLDataFlavorTest.java Fri May 17 10:06:20 2013 -0700 @@ -43,6 +43,11 @@ public static void main(String[] args) throws IOException, UnsupportedFlavorException { + if (sun.awt.OSInfo.getOSType() != sun.awt.OSInfo.OSType.WINDOWS) { + System.err.println("This test is for MS Windows only. Considered passed."); + return; + } + dataFlavors.put(DataFlavor.allHtmlFlavor, HtmlTransferable.ALL_HTML_AS_STRING); dataFlavors.put(DataFlavor.fragmentHtmlFlavor, HtmlTransferable.FRAGMENT_HTML_AS_STRING); dataFlavors.put(DataFlavor.selectionHtmlFlavor, HtmlTransferable.SELECTION_HTML_AS_STRING);