src/share/classes/java/awt/datatransfer/Clipboard.java

Print this page

        

*** 25,42 **** package java.awt.datatransfer; import java.awt.EventQueue; import java.util.Set; import java.util.HashSet; import java.util.Arrays; import java.io.IOException; - import sun.awt.EventListenerAggregate; - /** * A class that implements a mechanism to transfer data using * cut/copy/paste operations. * <p> * {@link FlavorListener}s may be registered on an instance of the --- 25,41 ---- package java.awt.datatransfer; import java.awt.EventQueue; + import java.util.Objects; import java.util.Set; import java.util.HashSet; import java.util.Arrays; import java.io.IOException; /** * A class that implements a mechanism to transfer data using * cut/copy/paste operations. * <p> * {@link FlavorListener}s may be registered on an instance of the
*** 66,76 **** /** * An aggregate of flavor listeners registered on this local clipboard. * * @since 1.5 */ ! private EventListenerAggregate flavorListeners; /** * A set of <code>DataFlavor</code>s that is available on * this local clipboard. It is used for tracking changes * of <code>DataFlavor</code>s available on this clipboard. --- 65,75 ---- /** * An aggregate of flavor listeners registered on this local clipboard. * * @since 1.5 */ ! private final Set<FlavorListener> flavorListeners = new HashSet<>(); /** * A set of <code>DataFlavor</code>s that is available on * this local clipboard. It is used for tracking changes * of <code>DataFlavor</code>s available on this clipboard.
*** 129,143 **** this.owner = owner; this.contents = contents; if (oldOwner != null && oldOwner != owner) { ! EventQueue.invokeLater(new Runnable() { ! public void run() { ! oldOwner.lostOwnership(Clipboard.this, oldContents); ! } ! }); } fireFlavorsChanged(); } /** --- 128,138 ---- this.owner = owner; this.contents = contents; if (oldOwner != null && oldOwner != owner) { ! EventQueue.invokeLater(() -> oldOwner.lostOwnership(Clipboard.this, oldContents)); } fireFlavorsChanged(); } /**
*** 259,271 **** */ public synchronized void addFlavorListener(FlavorListener listener) { if (listener == null) { return; } ! if (flavorListeners == null) { currentDataFlavors = getAvailableDataFlavorSet(); - flavorListeners = new EventListenerAggregate(FlavorListener.class); } flavorListeners.add(listener); } /** --- 254,265 ---- */ public synchronized void addFlavorListener(FlavorListener listener) { if (listener == null) { return; } ! if (flavorListeners.isEmpty()) { currentDataFlavors = getAvailableDataFlavorSet(); } flavorListeners.add(listener); } /**
*** 284,294 **** * @see FlavorListener * @see FlavorEvent * @since 1.5 */ public synchronized void removeFlavorListener(FlavorListener listener) { ! if (listener == null || flavorListeners == null) { return; } flavorListeners.remove(listener); } --- 278,288 ---- * @see FlavorListener * @see FlavorEvent * @since 1.5 */ public synchronized void removeFlavorListener(FlavorListener listener) { ! if (listener == null) { return; } flavorListeners.remove(listener); }
*** 303,342 **** * @see FlavorListener * @see FlavorEvent * @since 1.5 */ public synchronized FlavorListener[] getFlavorListeners() { ! return flavorListeners == null ? new FlavorListener[0] : ! (FlavorListener[])flavorListeners.getListenersCopy(); } /** * Checks change of the <code>DataFlavor</code>s and, if necessary, * notifies all listeners that have registered interest for notification * on <code>FlavorEvent</code>s. * * @since 1.5 */ private void fireFlavorsChanged() { - if (flavorListeners == null) { - return; - } Set<DataFlavor> prevDataFlavors = currentDataFlavors; currentDataFlavors = getAvailableDataFlavorSet(); ! if (prevDataFlavors.equals(currentDataFlavors)) { return; } ! FlavorListener[] flavorListenerArray = ! (FlavorListener[])flavorListeners.getListenersInternal(); ! for (int i = 0; i < flavorListenerArray.length; i++) { ! final FlavorListener listener = flavorListenerArray[i]; ! EventQueue.invokeLater(new Runnable() { ! public void run() { ! listener.flavorsChanged(new FlavorEvent(Clipboard.this)); ! } ! }); ! } } /** * Returns a set of <code>DataFlavor</code>s currently available * on this clipboard. --- 297,325 ---- * @see FlavorListener * @see FlavorEvent * @since 1.5 */ public synchronized FlavorListener[] getFlavorListeners() { ! return flavorListeners.toArray(new FlavorListener[flavorListeners.size()]); } /** * Checks change of the <code>DataFlavor</code>s and, if necessary, * notifies all listeners that have registered interest for notification * on <code>FlavorEvent</code>s. * * @since 1.5 */ private void fireFlavorsChanged() { Set<DataFlavor> prevDataFlavors = currentDataFlavors; currentDataFlavors = getAvailableDataFlavorSet(); ! if (Objects.equals(prevDataFlavors, currentDataFlavors)) { return; } ! flavorListeners.forEach(listener -> ! EventQueue.invokeLater(() -> ! listener.flavorsChanged(new FlavorEvent(Clipboard.this)))); } /** * Returns a set of <code>DataFlavor</code>s currently available * on this clipboard.