Dragging the mouse and then releasing it over the window of
another program will result in that program opening the file, or
creating a copy of it. This feature is supported only on X
-Windows and Haiku.
+Windows, Haiku, and Nextstep (macOS or GNUstep).
If the value is `link', then a symbolic link will be created to
the file instead by the other program (usually a file manager)."
(when (and (member "STRING" targets)
(stringp ns-dnd-selection-value))
(push (cons 'string ns-dnd-selection-value) pasteboard))
+ (when (and (member "FILE_NAME" targets)
+ (file-exists-p ns-dnd-selection-value))
+ (push (cons 'file
+ (url-encode-url (concat "file://"
+ (expand-file-name
+ ns-dnd-selection-value))))
+ pasteboard))
(ns-begin-drag frame pasteboard action)))
(provide 'ns-win)
ns_decode_data_to_pasteboard (Lisp_Object type, Lisp_Object data,
NSPasteboard *pasteboard)
{
+ NSArray *types, *new;
+
+ types = [pasteboard types];
+
CHECK_SYMBOL (type);
if (EQ (type, Qstring))
{
CHECK_STRING (data);
- [pasteboard declareTypes: [NSArray arrayWithObject: NSPasteboardTypeString]
+ new = [types arrayByAddingObject: NSPasteboardTypeString];
+
+ [pasteboard declareTypes: new
owner: nil];
[pasteboard setString: [NSString stringWithLispString: data]
forType: NSPasteboardTypeString];
}
+ else if (EQ (type, Qfile))
+ {
+ CHECK_STRING (data);
+
+ new = [types arrayByAddingObject: NSPasteboardTypeFileURL];
+
+ [pasteboard declareTypes: new
+ owner: nil];
+ [pasteboard setString: [NSString stringWithLispString: data]
+ forType: NSPasteboardTypeFileURL];
+ }
else
signal_error ("Unknown pasteboard type", type);
}
{
Lisp_Object tem, type, data;
+ [pasteboard declareTypes: [NSArray array]
+ owner: nil];
+
CHECK_LIST (object);
for (tem = object; CONSP (tem); tem = XCDR (tem))
{
- `string' means DATA should be a string describing text that will
be dragged to another program.
+ - `file' means DATA should be a file URL that will be dragged to
+ another program.
+
ACTION is the action that will be taken by the drop target towards the
data inside PBOARD.