jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java
changeset 23238 57997d148fc0
parent 21280 68b145d54e2a
child 23260 d68cbf54738f
--- a/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java	Fri Dec 13 09:36:06 2013 -0800
+++ b/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java	Mon Dec 16 17:35:08 2013 +0400
@@ -1598,6 +1598,30 @@
             // Turn the list of Files into a List and return
             theObject = Arrays.asList(files);
 
+            // Source data is a URI list. Convert to DataFlavor.javaFileListFlavor
+            // where possible.
+        } else if (isURIListFormat(format)
+                    && DataFlavor.javaFileListFlavor.equals(flavor)) {
+
+            try (ByteArrayInputStream str = new ByteArrayInputStream(bytes))  {
+
+                URI uris[] = dragQueryURIs(str, format, localeTransferable);
+                if (uris == null) {
+                    return null;
+                }
+                List<File> files = new ArrayList<>();
+                for (URI uri : uris) {
+                    try {
+                        files.add(new File(uri));
+                    } catch (IllegalArgumentException illegalArg) {
+                        // When converting from URIs to less generic files,
+                        // common practice (Wine, SWT) seems to be to
+                        // silently drop the URIs that aren't local files.
+                    }
+                }
+                theObject = files;
+            }
+
             // Target data is a String. Strip terminating NUL bytes. Decode bytes
             // into characters. Search-and-replace EOLN.
         } else if (String.class.equals(flavor.getRepresentationClass()) &&