src/share/classes/java/awt/datatransfer/Clipboard.java
Print this page
*** 31,42 ****
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
--- 31,40 ----
*** 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.
--- 64,74 ----
/**
* 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();
}
/**
--- 127,137 ----
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);
}
/**
--- 253,264 ----
*/
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);
}
--- 277,287 ----
* @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.
--- 296,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 (prevDataFlavors != null && currentDataFlavors != null
! && prevDataFlavors.equals(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.