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