mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Add file dragging support to NS port
* lisp/dired.el (dired-mouse-drag-files): Document that `dired-mouse-drag-files' now works on NS. * lisp/term/ns-win.el (x-begin-drag): Handle FILE_NAME. * src/nsselect.m (ns_decode_data_to_pasteboard): Handle file URL type. (ns_lisp_to_pasteboard, Fns_begin_drag): Handle new type `file'.
This commit is contained in:
parent
3c5fbfe4ac
commit
ffab237cbf
3 changed files with 32 additions and 2 deletions
|
|
@ -254,7 +254,7 @@ The target is used in the prompt for file copy, rename etc."
|
|||
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)."
|
||||
|
|
|
|||
|
|
@ -903,6 +903,13 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
|||
(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)
|
||||
|
|
|
|||
|
|
@ -561,17 +561,34 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
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);
|
||||
}
|
||||
|
|
@ -582,6 +599,9 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
{
|
||||
Lisp_Object tem, type, data;
|
||||
|
||||
[pasteboard declareTypes: [NSArray array]
|
||||
owner: nil];
|
||||
|
||||
CHECK_LIST (object);
|
||||
for (tem = object; CONSP (tem); tem = XCDR (tem))
|
||||
{
|
||||
|
|
@ -642,6 +662,9 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
- `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.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue