;;; x-dnd.el --- drag and drop support for X.
-;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
;; Free Software Foundation, Inc.
;; Author: Jan Dj\e,Ad\e(Brv <jan.h.d@swipnet.se>
(defcustom x-dnd-types-alist
- '(
- ("text/uri-list" . x-dnd-handle-uri-list)
- ("text/x-moz-url" . x-dnd-handle-moz-url)
- ("_NETSCAPE_URL" . x-dnd-handle-uri-list)
- ("FILE_NAME" . x-dnd-handle-file-name)
- ("UTF8_STRING" . x-dnd-insert-utf8-text)
- ("text/plain;charset=UTF-8" . x-dnd-insert-utf8-text)
- ("text/plain;charset=utf-8" . x-dnd-insert-utf8-text)
- ("text/unicode" . x-dnd-insert-utf16-text)
- ("text/plain" . dnd-insert-text)
- ("COMPOUND_TEXT" . x-dnd-insert-ctext)
- ("STRING" . dnd-insert-text)
- ("TEXT" . dnd-insert-text)
+ `(
+ (,(purecopy "text/uri-list") . x-dnd-handle-uri-list)
+ (,(purecopy "text/x-moz-url") . x-dnd-handle-moz-url)
+ (,(purecopy "_NETSCAPE_URL") . x-dnd-handle-uri-list)
+ (,(purecopy "FILE_NAME") . x-dnd-handle-file-name)
+ (,(purecopy "UTF8_STRING") . x-dnd-insert-utf8-text)
+ (,(purecopy "text/plain;charset=UTF-8") . x-dnd-insert-utf8-text)
+ (,(purecopy "text/plain;charset=utf-8") . x-dnd-insert-utf8-text)
+ (,(purecopy "text/unicode") . x-dnd-insert-utf16-text)
+ (,(purecopy "text/plain") . dnd-insert-text)
+ (,(purecopy "COMPOUND_TEXT") . x-dnd-insert-ctext)
+ (,(purecopy "STRING") . dnd-insert-text)
+ (,(purecopy "TEXT") . dnd-insert-text)
)
"Which function to call to handle a drop of that type.
If the type for the drop is not present, or the function is nil,
:group 'x)
(defcustom x-dnd-known-types
+ (mapcar 'purecopy
'("text/uri-list"
"text/x-moz-url"
"_NETSCAPE_URL"
"COMPOUND_TEXT"
"STRING"
"TEXT"
- )
+ ))
"The types accepted by default for dropped data.
The types are chosen in the order they appear in the list."
:version "22.1"
(let ((buffer (when (window-live-p window)
(window-buffer window)))
(current-state (x-dnd-get-state-for-frame window)))
- (when (or (not (equal buffer (aref current-state 0)))
- (not (equal window (aref current-state 1)))
- (not (equal action (aref current-state 3))))
- (save-excursion
+ (unless (and (equal buffer (aref current-state 0))
+ (equal window (aref current-state 1))
+ (equal action (aref current-state 3)))
+ (save-current-buffer
(when buffer (set-buffer buffer))
(let* ((action-type (funcall x-dnd-test-function
window
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; XDND protocol.
-(defvar x-dnd-xdnd-to-action
+(defconst x-dnd-xdnd-to-action
'(("XdndActionPrivate" . private)
("XdndActionCopy" . copy)
("XdndActionMove" . move)