String type;
Uri uri;
EmacsActivity activity;
+ StringBuilder builder;
x = (int) event.getX ();
y = (int) event.getY ();
EmacsNative.sendDndUri (handle, x, y, type);
return true;
}
- else
- {
- /* If the item dropped is a URI, send it to the main
- thread. */
-
- uri = data.getItemAt (0).getUri ();
+ }
- /* Attempt to acquire permissions for this URI;
- failing which, insert it as text instead. */
+ /* There's no plain text data within this clipboard item, so
+ each item within should be treated as a content URI
+ designating a file. */
- if (uri != null
- && uri.getScheme () != null
- && uri.getScheme ().equals ("content")
- && (activity = EmacsActivity.lastFocusedActivity) != null)
- {
- if (activity.requestDragAndDropPermissions (event) == null)
- uri = null;
- }
+ /* Collect the URIs into a string with each suffixed
+ by newlines, much as in a text/uri-list. */
+ builder = new StringBuilder ();
- if (uri != null)
- EmacsNative.sendDndUri (handle, x, y, uri.toString ());
- else
- {
- type = (data.getItemAt (0)
- .coerceToText (EmacsService.SERVICE)
- .toString ());
- EmacsNative.sendDndText (handle, x, y, type);
- }
+ for (i = 0; i < itemCount; ++i)
+ {
+ /* If the item dropped is a URI, send it to the
+ main thread. */
+
+ uri = data.getItemAt (i).getUri ();
+
+ /* Attempt to acquire permissions for this URI;
+ failing which, insert it as text instead. */
+
+ if (uri != null
+ && uri.getScheme () != null
+ && uri.getScheme ().equals ("content")
+ && (activity = EmacsActivity.lastFocusedActivity) != null)
+ {
+ if ((activity.requestDragAndDropPermissions (event) == null))
+ uri = null;
+ }
- return true;
+ if (uri != null)
+ builder.append (uri.toString ()).append ("\n");
+ else
+ {
+ /* Treat each URI that Emacs cannot secure
+ permissions for as plain text. */
+ type = (data.getItemAt (i)
+ .coerceToText (EmacsService.SERVICE)
+ .toString ());
+ EmacsNative.sendDndText (handle, x, y, type);
}
}
+
+ /* Now send each URI to Emacs. */
+
+ if (builder.length () > 0)
+ EmacsNative.sendDndUri (handle, x, y, builder.toString ());
+
+ return true;
}
return true;