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;
         }