src/share/classes/sun/awt/datatransfer/SunClipboard.java
Print this page
*** 38,48 ****
import java.awt.datatransfer.UnsupportedFlavorException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
! import java.util.Objects;
import java.util.Set;
import java.util.HashSet;
import java.io.IOException;
--- 38,48 ----
import java.awt.datatransfer.UnsupportedFlavorException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
! import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.io.IOException;
*** 72,86 ****
* on this clipboard across all <code>AppContext</code>s.
*/
private volatile int numberOfFlavorListeners = 0;
/**
! * A set of <code>DataFlavor</code>s that is available on
* this clipboard. It is used for tracking changes
* of <code>DataFlavor</code>s available on this clipboard.
*/
! private volatile Set<DataFlavor> currentDataFlavors;
public SunClipboard(String name) {
super(name);
CLIPBOARD_FLAVOR_LISTENER_KEY = new StringBuffer(name + "_CLIPBOARD_FLAVOR_LISTENER_KEY");
--- 72,86 ----
* on this clipboard across all <code>AppContext</code>s.
*/
private volatile int numberOfFlavorListeners = 0;
/**
! * A set of formats that is available on
* this clipboard. It is used for tracking changes
* of <code>DataFlavor</code>s available on this clipboard.
*/
! private volatile long[] currentDataFormats;
public SunClipboard(String name) {
super(name);
CLIPBOARD_FLAVOR_LISTENER_KEY = new StringBuffer(name + "_CLIPBOARD_FLAVOR_LISTENER_KEY");
*** 356,375 ****
appContext.put(CLIPBOARD_FLAVOR_LISTENER_KEY, flavorListeners);
}
flavorListeners.add(listener);
if (numberOfFlavorListeners++ == 0) {
! long[] currentFormats = null;
! try {
! openClipboard(null);
! currentFormats = getClipboardFormats();
! } catch (IllegalStateException exc) {
! } finally {
! closeClipboard();
! }
! currentDataFlavors = formatArrayAsDataFlavorSet(currentFormats);
!
registerClipboardViewerChecked();
}
}
public synchronized void removeFlavorListener(FlavorListener listener) {
--- 356,366 ----
appContext.put(CLIPBOARD_FLAVOR_LISTENER_KEY, flavorListeners);
}
flavorListeners.add(listener);
if (numberOfFlavorListeners++ == 0) {
! currentDataFormats = getClipboardFormatsOpenClose();
registerClipboardViewerChecked();
}
}
public synchronized void removeFlavorListener(FlavorListener listener) {
*** 381,391 ****
//else we throw NullPointerException, but it is forbidden
return;
}
if (flavorListeners.remove(listener) && --numberOfFlavorListeners == 0) {
unregisterClipboardViewerChecked();
! currentDataFlavors = null;
}
}
@SuppressWarnings("unchecked")
private Set<FlavorListener> getFlavorListeners(AppContext appContext) {
--- 372,382 ----
//else we throw NullPointerException, but it is forbidden
return;
}
if (flavorListeners.remove(listener) && --numberOfFlavorListeners == 0) {
unregisterClipboardViewerChecked();
! currentDataFormats = null;
}
}
@SuppressWarnings("unchecked")
private Set<FlavorListener> getFlavorListeners(AppContext appContext) {
*** 415,428 ****
*
* @param formats data formats that have just been retrieved from
* this clipboard
*/
public void checkChange(long[] formats) {
! Set<DataFlavor> prevDataFlavors = currentDataFlavors;
! currentDataFlavors = formatArrayAsDataFlavorSet(formats);
! if (Objects.equals(prevDataFlavors, currentDataFlavors)) {
// we've been able to successfully get available on the clipboard
// DataFlavors this and previous time and they are coincident;
// don't notify
return;
}
--- 406,419 ----
*
* @param formats data formats that have just been retrieved from
* this clipboard
*/
public void checkChange(long[] formats) {
! long[] prevDataFlavors = currentDataFormats;
! currentDataFormats = formats;
! if (Arrays.equals(prevDataFlavors, currentDataFormats)) {
// we've been able to successfully get available on the clipboard
// DataFlavors this and previous time and they are coincident;
// don't notify
return;
}