src/share/classes/sun/awt/datatransfer/SunClipboard.java
Print this page
@@ -38,11 +38,11 @@
import java.awt.datatransfer.UnsupportedFlavorException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.util.Objects;
+import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.io.IOException;
@@ -72,15 +72,15 @@
* 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
+ * 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 Set<DataFlavor> currentDataFlavors;
+ private volatile long[] currentDataFormats;
public SunClipboard(String name) {
super(name);
CLIPBOARD_FLAVOR_LISTENER_KEY = new StringBuffer(name + "_CLIPBOARD_FLAVOR_LISTENER_KEY");
@@ -356,20 +356,11 @@
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);
-
+ currentDataFormats = getClipboardFormatsOpenClose();
registerClipboardViewerChecked();
}
}
public synchronized void removeFlavorListener(FlavorListener listener) {
@@ -381,11 +372,11 @@
//else we throw NullPointerException, but it is forbidden
return;
}
if (flavorListeners.remove(listener) && --numberOfFlavorListeners == 0) {
unregisterClipboardViewerChecked();
- currentDataFlavors = null;
+ currentDataFormats = null;
}
}
@SuppressWarnings("unchecked")
private Set<FlavorListener> getFlavorListeners(AppContext appContext) {
@@ -415,14 +406,14 @@
*
* @param formats data formats that have just been retrieved from
* this clipboard
*/
public void checkChange(long[] formats) {
- Set<DataFlavor> prevDataFlavors = currentDataFlavors;
- currentDataFlavors = formatArrayAsDataFlavorSet(formats);
+ long[] prevDataFlavors = currentDataFormats;
+ currentDataFormats = formats;
- if (Objects.equals(prevDataFlavors, currentDataFlavors)) {
+ 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;
}